2023 滴滴笔试题 0908
笔试时间:2023年9月8日 秋招
备注:第二题暂无题解。
第一题
题目:糖果生产
糖果工厂可以生产n种不同的糖果,假设这些精果的将号分别为1到n,每一天工厂可以生产ci个编号为i的糖果。今天工厂接到了一个订单,需求是a包糖果,且每包糖果必须是同一种类的,每包数量不能少于b个,假设糖果工厂在无存货的情况下,至今需要多少天才能完成这个订单?
输入描述
第一行是三个正整数n、a、b,分别表示糖果工厂可以生成的糖果种类数,订单的需求是a包糖果,每包不少于b个。
第二行是n个正整数c1,c2,...,cn,其中第i个数ci表示工厂每天能生产的编号为i的糖果的数量。
对所有的数据保证:1<=n<=100000,1<=a,b<=10^7,1<=a<=10000
输出描述
一行一个正整数,表示完成所有订单所需的最少天数。
样例输入
3 10 20
7 9 6
样例输出
10
提示:
第9天时三种糖果的数量分别63、81、54,可以分别打包出3、4、2包,共9包,此时还不能满足订单要求。
第10天时三种糖果的数量分别70、90、60,可以分别打包出3、4、3包,共10包,可以满足订单要求。
参考题解
构造check函数进行二分,最少一天,最多10的14次方天,然后不断地通过check判断当前天数能否满足生产要求,不断的寻找最少天数。
C++:[此代码未进行大量数据的测试,仅供参考]
#include <bits/stdc++.h> using namespace std; const int MAXN = 100005; bool check(long long x, int n, int a, int b, int c[]) { long long sum = 0; for (int i = 1; i <= n; i++) { sum += x * c[i] / b; if (sum >= a) { return true; } } return false; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, a, b; cin >> n >> a >> b; int c[MAXN]; for (int i = 1; i <= n; i++) { cin >> c[i]; } long long l = 1, r = 1e14, ans = -1; while (l <= r) { long long mid = l + (r - l) / 2; if (check(mid, n, a, b, c)) { ans = mid; r = mid - 1; } else { l = mid + 1; } } cout << ans << "\n
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
2023 秋招笔试题汇总解析 文章被收录于专栏
2023秋招各大笔试题汇总,c++,java,python多种语言分析,解答。