AT_iroha2019_day3_c

· · 题解

题目大意

传送门

思路

这题是一个数学题,我们可以把他想的简单一点。

  1. 把每个人分到的设为一个大数,这里设为 1000000005
  2. 前面 n-1 人分到的都是 10000000005 的礼物。
  3. 最后一人分到的总和也是 10000000005,此时还剩 m - n + 1 个礼物,那我们可以拿 1 来凑数,也就是 m - n11000000005 - k + n + 1
  4. 输出 YES
  5. 最后输出 1 \sim n-1,再输出 k - n + 1n

代码

#include <bits/stdc++.h>
using namespace std;

int n, k, maxn = 1e9 + 5; //第一步,设数

int main(){
    cin >> n >> k;
    for (int i = 1; i <= n - 1; i++) cout << maxn << " ";
    //第二步,输出n - 1个最大值
    for (int i = 1; i <= k - n - 1; i++) cout << 1 << " ";
    cout << maxn - k + n + 1 << endl;
    //第三步,最后一人分到的
    cout << "YES\n";
    //第四步,都满足情况,输出YES
    for (int i = 1; i <= n - 1; i++) cout << i << " ";
    for (int i = 1; i <= k - n + 1; i++) cout << n << " ";
    //第五步,输出顺序
    return 0;
}