P9429 [NAPC-#1] Stage1 - Simple 题解

· · 题解

一道比较简单的构造题。

我们首先从最简单的情况来看。

Sn 的倍数的时候,那么问题就转化成了将 S 平均分成 n 份,那么只需要输出 n\large\frac{S}{n} 就可以了。

那么我们来考虑其他情况,即 S 不是 n 的倍数。我们先按前面的方法处理,此时会剩下 S \bmod n。此时方法也很简单,将后 S \bmod n 个数 +1 就可以了。

整理一下,得到以下结论:

组成答案序列的 n 个数中,前 n - (S \bmod n) 个数为 \large\frac{S}{n},后 S \bmod n 个数为 \large\frac{S}{n}\small+1

推出了结论,代码就好写了。

#include <iostream>
using namespace std;
int main() {
    long long n,m,k,s; cin >> n >> m >> k >> s;
    for(int i = 1; i <= n - (s % n);i++) cout << s / n << ' ';
    for(int i = 1; i <= s % n;i++) cout << s / n + 1 << " \n"[i == (s%n)];
    return 0;
}