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 陕西
网易互娱
校招火热招聘中
官网直投
为什么第一题中的均值的k倍是和a[l]比,而不是和窗口中的最大值比?
点赞
送花
回复
分享
发布于 2022-09-04 23:40 陕西
第一题同解法,过了64,会是vector的影响吗?
点赞
送花
回复
分享
发布于 2022-09-04 23:48 天津
第一题能AC吗
点赞
送花
回复
分享
发布于 2022-09-04 21:48 湖南
好奇怪,第二题每个区间我只算第一个数的漂亮数x,区间后面的数的漂亮数只需要把x累积与1xor就行,然后比较是不是漂亮数,ac了,下来我越想越不对啊,咋ac的,感觉是他的实例不完备,被我偷鸡了
点赞
送花
回复
分享
发布于 2022-09-05 00:41 四川
你这个a了吗?
点赞
送花
回复
分享
发布于 2022-09-05 11:04 四川

相关推荐

4 13 评论
分享
牛客网
牛客企业服务