题解 CF1476A 【K-divisible Sum】
题解前小彩蛋(雾

小彩蛋个鬼
思路
设\(s\)是数组\(a\)的所有数的和。一方面,\(s\)应该能被\(k\)整除,那么我们就可以说\(s=cf·k\)。从另一方面,因为所有的\(a_i\)都是正数,所以\(s \geq n\)。
非常明显的是,\(s\)越小,\(a_i\)的最大值越小,所以我们需要找到最小的\(cf\)使其可以达到\(cf·k \geq n\)。那么,\(cf=\lceil \frac{n}{k} \rceil=\lfloor \frac{n+k-1}{k} \rfloor\)。
现在,我们知道,\(s=cf·k\),所以,我们需要在满足\(a_1+a_2+...+a_n\)并且\(a_i\)最小。证明\(a_i \geq \lceil \frac{s}{n} \rceil\)最大是与前面的陈述矛盾的。
还有,我们一定可以找到这样的一个数组\(a\),他的总和是\(s\)并且\(a\)最大的元素是等于\(\lceil \frac{s}{n} \rceil\)的。
结果是,答案是\(\lceil \frac{s}{n} \rceil=\lfloor \frac{cf·k+n-1}{n}\rfloor\)。这时,\(cf=\lfloor \frac{n+k-1}{k}\rfloor\)。
code
#include<bits/stdc++.h>
using namespace std;
void solve() {
int t;
cin >> t;
while(t--) {
long long n, k;
cin >> n >> k;
long long cf = (n + k - 1) / k;
k *= cf;
cout << (k + n - 1) / n << endl;
}
}
int main() {
solve();
return 0;
}

浙公网安备 33010602011771号