9.4 滴滴笔试-题解

第一题 选取尽量多的元素,但其中最大值不能超过平均值的k倍

法1:从大到小排序,然后尺取一下
法2:二分

#include <algorithm>
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;

int n, k;
long long a[200005];

bool cmp(int x, int y) {
    return x > y;
}

int main() {
    cin >> n >> k;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
    }

    sort(a + 1, a + n + 1, cmp);

    int l = 1, r = 1, ans = 1;
    long long sum = a[1];
    while (r <= n) {
        while (l < r && sum / (double)(r - l + 1) * k < (double)a[l]) {
            sum -= a[l];
            l++;
        }
        ans = max(ans, r - l + 1);
        if (r == n) {
            break;
        }
        r++;
        sum += a[r];
    }

    cout << ans << endl;

    return 0;
}

第二题 定义f(x)=x的十进制各位的异或和,最多70000次询问,询问[L,R]中f(x)为t的值有多少个。1<=L<=R<=70000

预处理+前缀和,离线查询

#include <algorithm>
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;

int n;
int l[100005], r[100005], q[100005], ans[100005];
int sum[70005][16];

void init() {
    for (int i = 0; i <= 70003; i++) {
        int t = i;
        int x = 0;
        while (t) {
            x ^= t % 10;
            t /= 10;
        }
        sum[i][x] = 1;
    }

    for (int i = 0; i < 16; i++) {
        for (int j = 0; j <= 70003; j++) {
            if (j == 0) {
                continue;
            }
            sum[j][i] += sum[j - 1][i];
        }
    }
}

int main() {
    init();
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> l[i];
    }
    for (int i = 1; i <= n; i++) {
        cin >> r[i];
    }
    for (int i = 1; i <= n; i++) {
        cin >> q[i];
    }

    for (int i = 1; i <= n; i++) {
        if (q[i] > 15) {
            ans[i] = 0;
            continue;
        }
        if (l[i] == 0) {
            ans[i] = sum[r[i]][q[i]];
        }
        else {
            ans[i] = sum[r[i]][q[i]] - sum[l[i] - 1][q[i]];
        }
    }

    cout << ans[1];
    for (int i = 2; i <= n; i++) {
        cout << ' ' << ans[i];
    }
    cout << endl;

    return 0;
}
#笔试##滴滴笔试##滴滴#
全部评论
有大佬帮忙看看第二题吗,感谢!思路差不多没过,不知道哪里没注意
点赞 回复 分享
发布于 2022-09-05 09:07 安徽
请问第一题为啥从大到小可以而从小到大排不行呀?
点赞 回复 分享
发布于 2022-09-05 09:04 陕西
第一题同解法,过了64,会是vector的影响吗?
点赞 回复 分享
发布于 2022-09-04 23:48 天津
为什么第一题中的均值的k倍是和a[l]比,而不是和窗口中的最大值比?
点赞 回复 分享
发布于 2022-09-04 23:40 陕西
你这个a了吗?
点赞 回复 分享
发布于 2022-09-05 11:04 四川
好奇怪,第二题每个区间我只算第一个数的漂亮数x,区间后面的数的漂亮数只需要把x累积与1xor就行,然后比较是不是漂亮数,ac了,下来我越想越不对啊,咋ac的,感觉是他的实例不完备,被我偷鸡了
点赞 回复 分享
发布于 2022-09-05 00:41 四川
第一题能AC吗
点赞 回复 分享
发布于 2022-09-04 21:48 湖南

相关推荐

05-12 10:10
已编辑
门头沟学院 人工智能
写这篇之前我犹豫了挺久。一方面是怕被人骂,&quot;又一个收割焦虑的转行帖&quot;;另一方面是看了太多用&nbsp;GPT&nbsp;套娃出来的「学习路线」文章,AI&nbsp;味重得让人没法读完。所以这篇全是亲身踩过的坑,时间线、用过的项目、当时的心路全都尽量原样写出来。如果你是大学生在迷茫要不要转&nbsp;AI,或者已经在转的路上,希望能给点参考。&nbsp;一个反共识的开场:你以为进&nbsp;OpenAI&nbsp;的人都是博士?&nbsp;先讲个故事,跟我没关系,但跟所有想转&nbsp;AI&nbsp;的人都有关系。&nbsp;OpenAI&nbsp;的&nbsp;Sora&nbsp;团队(就是搞文生视频那个)一共&nbsp;13&nbsp;个人。这里面有两个人特别有意思:&nbsp;Will&nbsp;DePue,密歇根大学计算机系,直接辍学了。17...
_hengheng:我也本,也算是做ai相关,我最开始感觉做ai工程师有多么多么困难,后来发现懂了原理后整体训练完全可以看成一个流程化的内容,开源方案太多了,大多基本都是按着模子在自家业务上做各种操作,就算是大厂的小部门也没那么多资源去训基模,反而更多的是像怎么把技术往业务方向靠近了,不过当前时代如果本科学历没那么好加上自己执行力不是特别强还真不建议走ai工程师这条路,可以试试其他ai的偏业务方向,不然校招不太好杀出来
点赞 评论 收藏
分享
评论
4
13
分享

创作者周榜

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