链接
C
题意
给两个\(Stack\),\(A、B\)。\(A、B\)中分别有\(N、M\)个物品,每个物品分别有一个价值,\(A[i]、B[j]\)。现在给定一个\(K\),现在需要从A、B中将物品从栈拿出来(每次从最上面拿),一次拿一个,要求所拿出来的物品的价值的总价值不大于\(K\),求最多可以拿出来多少个物品;
输入格式:第一行\(N、M、K\),第二行\(N\)个数表示序列\(A\),第三行\(M\)个数表示序列\(B\)。
数据范围:\(1\leq N,M\leq 200000,1\leq K\leq 10^9,1\leq A_i,B_i\leq 10^9\).
输出格式:输出一个整数,代表最多可以拿出来的物品的个数。
分析
即求满足\(sumA[i]+sumB[j]\leq K\)的\(\max(i+j)\),那么我们枚举\(i\)(\(j\)也可以),对每个\(i\),找到二分找到满足\(sumA[i]+sumB[j]\leq K\)的最大的\(j\),然后取\(\max(i+j)\)即可;
代码
1 |
|
D
题意
定义\(f(x)\)为\(x\)的因子的个数,如\(f(4)=3\),现在,给定一个\(N\)需要求\(\sum_{x=1}^{N}x\times f(x)\);
数据范围:\(1\leq N \leq10^7\)
分析
对于第\(i\)个数来说,它对\(\sum_{x=1}^{N}x\times f(x)\)的贡献为\(\frac{t*(t+1)*i}{2}\),其中\(t=N/i\);
代码
1 |
|