9.4 滴滴笔试编程题题解

1. 二分+暴力枚举
#include <bits/stdc++.h>
using namespace std;

int main() {
  using ll = long long;
  int n, k; cin >> n >> k;
  vector<int> v(n);
  for (int i = 0; i < n; i++) cin >> v[i];
  sort(v.begin(), v.end());
  vector<ll> preSum(n+1);
  for (int i = 1; i <= n; i++) {
    preSum[i] = preSum[i-1] + v[i-1];
  }
  auto ck = [&] (int m) -> bool {
    for (int i = 0; i < n-m+1; i++) {
      if (1.0*(preSum[i+m]-preSum[i])/m*k >= v[i+m-1]) {
        return true;
      }
    }
    return false;
  };
  int low = 1, high = n;
  int ans = 1;
  while (low <= high) {
    int m = (low+high)/2;
    if (!ck(m)) {
      high = m-1;
    } else {
      ans = m;
      low = m+1;
    }
  }
  cout << ans << endl;
  return 0;
}
2. 前缀和初始化。有个要注意的点是 t 大于等于16时可以直接输出0,因为 0-9 内的任意个数异或范围为 [0, 16)。总的来说两题都不难,即使想不到也能暴力过一部份。
#include <bits/stdc++.h>
using namespace std;
int main() {
  vector<vector<int>> cnt(70001, vector<int>(20));
  cnt[0][0] = 1;
  for (int i = 1; i < 70001; i++) {
    int s = 0, tmp = i;
    while (tmp) {
      s ^= tmp % 10;
      tmp /= 10;
    }
    for (int j = 0; j < 16; j++) {
      cnt[i][j] = cnt[i-1][j]+(j==s);
    }
  }
  int n; cin >> n;
  vector<int> l(n), r(n), t(n);
  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 >> t[i];

  for (int i = 0; i < n; i++) {
    if (t[i] >= 16) {
      cout << 0 << " ";
      continue;
    }
    cout << cnt[r[i]][t[i]] - (l[i] ? cnt[l[i]-1][t[i]] : 0) << " ";
  }
  cout << endl;
  return 0;
}



#滴滴笔试##滴滴23秋招笔试有点儿难啊#
全部评论
大佬优秀
点赞 回复 分享
发布于 2022-09-04 20:45 辽宁
有没有直接输出 0 的?能过多少数据呀?我 打表+递归老是超时,最多才过80%
点赞 回复 分享
发布于 2022-09-04 20:48 北京
我什么时候才能向大佬一样优秀
点赞 回复 分享
发布于 2022-09-04 20:49 上海
优秀啊,什么时候像大佬一样优秀😂
点赞 回复 分享
发布于 2022-09-04 20:51 天津
前缀和,想都想不到,大佬太牛逼了
点赞 回复 分享
发布于 2022-09-04 21:03 浙江
大佬啊这是,第一题还以为可以滑动窗口,现在发现没有这种贪心性质,还是要暴力搜索
点赞 回复 分享
发布于 2022-09-04 21:13 广东
第一题二分是怎么意思啊,可以详细说下嘛
点赞 回复 分享
发布于 2022-09-04 21:55 江苏
orz
点赞 回复 分享
发布于 2022-09-04 23:56 陕西
hi~同学,秋招遇“寒气”,牛客送温暖啦!23届秋招笔面经有奖征集中,参与就得牛客会员7天免费体验,最高赢300元京东卡!戳我去看>>>https://www.nowcoder.com/link/zhengjipinglun
点赞 回复 分享
发布于 2022-09-05 11:15 北京

相关推荐

10-30 23:23
已编辑
中山大学 Web前端
去B座二楼砸水泥地:这无论是个人素质还是专业素质都👇拉满了吧
点赞 评论 收藏
分享
点赞 评论 收藏
分享
11 27 评论
分享
牛客网
牛客企业服务