9.4滴滴笔试题解 82% 100%


第一题过了82%,第二题过了100%

第一题每次删最大的数才能维持条件,就是不知道为啥一直卡在82%
第二题哈希+二分直接过,100%

第一题桃子装箱
n个桃子,每个重ai,尽可能多的装入一个箱子,要求箱子内最终的桃子重量不能超过平均重量的k倍,问最多能装多少个桃子?
输入:
第一行n和k。
第二行n个数,对应每个桃子的重量。
输出:最多能装的数量

例子:
输入:
5 2
3 10 5 4 2
输出:
4

#include<bits/stdc++.h>
using namespace std;
int main()
{
    long long n;
    double k;
    while (cin>>n>>k)
    {
        vector<long long> nums(n, 0);
        long long  sum = 0;
        double avg;
        priority_queue<long long> q;
        for (long long i = 0; i < n; ++i){
            cin>>nums[i];
            sum += nums[i];
            q.push(nums[i]);
        }    
        while (double(n / k) * q.top() > double(sum))
        {
            sum -= q.top();
            n--;
            q.pop();
        }
        cout<<n<<endl;
    }
    return 0;
}




第二题老张的美术课
对于每个非负整数都有一个美丽值,美丽值定义为这个数十进制下每个数位的异或和,如123的美丽值是1^2^3=0。问对于一个闭区间[L, R]中所有的整数,美丽值恰好为t的数有多少个?

输入:
第一行一个正整数T,代表T个询问
第二行T个非负整数,Li
第三行T个非负整数,Ri
第四行T个非负整数,ti

输出:
每个询问输出一个整数,每个输出用空格隔开

例子:
输入:
2
0 1
0 10
0 1
输出:
1 2

#include <bits/stdc++.h>
using namespace std;
int get_xor(long long x)
{
    int res = 0;
    while (x)
    {
        res ^= (x % 10);
        x /= 10;
    }
    return res;
}
int main()
{
    unordered_map<long long, vector<long long>> map;
    for (long long i = 0, r; i <= 70000; ++i)
    {
        r = get_xor(i);
        map[r].push_back(i);
    }
    int n;
    while (cin >> n)
    {
        vector<long long> L(n, 0), R(n, 0), Q(n, 0);
        for (int i = 0; i < n; ++i) cin >> L[i];
        for (int i = 0; i < n; ++i) cin >> R[i];
        for (int i = 0; i < n; ++i)
        {
            cin >> Q[i];
            int lindex = lower_bound(map[Q[i]].begin(), map[Q[i]].end(), L[i]) - map[Q[i]].begin();
            int rindex = lower_bound(map[Q[i]].begin(), map[Q[i]].end(), R[i]) - map[Q[i]].begin();
            cout<<rindex - lindex + 1<<" ";
        }
        cout<<endl;
    }   
    return 0;
}


#滴滴笔试##滴滴23秋招笔试有点儿难啊#
全部评论
第一题你每次删最大的,没有考虑最小的当然不行,比如说它有一个是1,其他的都在100以上。这种特别大的和特别小的值对平均值的影响都很大,这也是为什么现实中评委投票要去掉最低分和最高分。正确的选择方式应该是尽量选质量差不多的。
点赞 回复 分享
发布于 2022-09-04 21:03 四川
第一题你从大到小排序,然后滑动窗口往右滑就行了
点赞 回复 分享
发布于 2022-09-04 22:07 广东
m
点赞 回复 分享
发布于 2023-03-10 16:01 湖南
请问题型是怎么样的 有选择吗
点赞 回复 分享
发布于 2022-09-16 17:15 安徽

相关推荐

1.自我介绍2.介绍一下mcp,&nbsp;skills3.了解react哪些状态管理库4.对话是sse还是什么?是用fetch还是EventSource?5.ts中的any&nbsp;和&nbsp;unknown讲一讲6.是直接用组件库的组件还是自己封装了一些别的7.代码输出题1function&nbsp;main()&nbsp;{{var&nbsp;a&nbsp;=&nbsp;1let&nbsp;b&nbsp;=&nbsp;2}console.log(a);console.log(b);}main()console.log(a);8.什么是块级作用域&nbsp;全局作用域&nbsp;函数作用域9.代码输出题2for&nbsp;(var&nbsp;i&nbsp;=&nbsp;0;i&nbsp;&amp;lt;&nbsp;5;i++)&nbsp;{setTimeout(()&nbsp;=&amp;gt;&nbsp;{console.log(i);},&nbsp;100);}10.代码输出题3for&nbsp;(var&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&amp;lt;&nbsp;5;&nbsp;i++){function&nbsp;printText(temp)&nbsp;{setTimeout(()&nbsp;=&amp;gt;&nbsp;{console.log(temp);},&nbsp;100);}printText(i)}11.代码输出题4for(var&nbsp;i&nbsp;=&nbsp;0;i&nbsp;&amp;lt;&nbsp;5;i++){function&nbsp;printText(temp)&nbsp;{var&nbsp;temp&nbsp;=&nbsp;isetTimeout(()&nbsp;=&amp;gt;&nbsp;{console.log(temp);},&nbsp;100);}printText(i)}12.代码输出题5for(var&nbsp;i&nbsp;=&nbsp;0;i&nbsp;&amp;lt;&nbsp;5;i++){function&nbsp;printText(temp)&nbsp;{setTimeout(()&nbsp;=&amp;gt;&nbsp;{var&nbsp;temp&nbsp;=&nbsp;iconsole.log(temp);},&nbsp;100);}printText(i)}13.点击控制台输出题export&nbsp;default&nbsp;function&nbsp;App()&nbsp;{const&nbsp;[count,&nbsp;setCount]&nbsp;=&nbsp;useState(0)console.log('render',count)return&nbsp;(&lt;div&gt;&lt;h1&gt;{count}&lt;/h1&gt;{setCount(count&nbsp;+&nbsp;1)setTimeout(()&nbsp;=&amp;gt;&nbsp;console.log('setTimeout',&nbsp;count),&nbsp;1000)}}&amp;gt;+1&lt;/div&gt;)}//这个组件点击按钮后,控制台的输出顺序和值如下://&nbsp;1.&nbsp;render&nbsp;1&nbsp;(组件重新渲染,&nbsp;count&nbsp;更新为&nbsp;1)//&nbsp;2.&nbsp;setTimeout&nbsp;0&nbsp;(1秒后输出,注意这里是&nbsp;0&nbsp;而不是&nbsp;1)14.算法:给有序数组arr&nbsp;=&nbsp;[-4,&nbsp;-1,&nbsp;0,&nbsp;3,&nbsp;5],返回平方后的排序//&nbsp;有序数组平方后排序const&nbsp;arr&nbsp;=&nbsp;[-4,&nbsp;-1,&nbsp;0,&nbsp;3,&nbsp;5]function&nbsp;solution(arr)&nbsp;{const&nbsp;len&nbsp;=&nbsp;arr.lengthconst&nbsp;result&nbsp;=&nbsp;new&nbsp;Array(len)let&nbsp;left&nbsp;=&nbsp;0let&nbsp;right&nbsp;=&nbsp;len&nbsp;-&nbsp;1let&nbsp;index&nbsp;=&nbsp;len&nbsp;-&nbsp;1while&nbsp;(left&nbsp;&amp;lt;=&nbsp;right)&nbsp;{if&nbsp;(arr[left]&nbsp;*&nbsp;arr[left]&nbsp;&amp;gt;&nbsp;arr[right]&nbsp;*&nbsp;arr[right])&nbsp;{result[index]&nbsp;=&nbsp;arr[left]&nbsp;*&nbsp;arr[left]left++}&nbsp;else&nbsp;{result[index]&nbsp;=&nbsp;arr[right]&nbsp;*&nbsp;arr[right]right--}index--}return&nbsp;result}console.log(solution(arr));15.反问
查看14道真题和解析
点赞 评论 收藏
分享
评论
7
11
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务