Codeforces Global Round 25

A 了三题,2000+
卡在第四题,一个构造题上了

D. Buying Jewels

Problem - D - Codeforces

输入 n 和 k
其中 n 是钱,k 是要买够 k 个物品
让你构造一个数组代表摊位,你会贪心地将钱花在第一个,然后如果有剩余再去第二个…

思路 1 个大物品和 k - 1 个小物品
也就是说
第一个摊位是 first = (n - k + 1),我们可以买一个
第二个摊位是 1,剩下的钱去买 k - 1 个 1

需要保证 first X 2 > n

1
2
3
4
5
6
7
8
9
10
11
12
13
void solve(ll n, ll k) {
ll tmp = n - (k - 1);
if (tmp * 2 > n) {
cout << "YES\n";
cout<<"2\n";
cout<<tmp<<" 1\n";
} else if (n == k) {
cout << "YES\n";
cout << 1 << endl << 1 << endl;
} else {
cout << "NO\n";
}
}