結構ギャグ要素強めな問題だった
問題概要
3 つの整数 が与えられる。
長さ の整数列 であって、以下の条件を満たすものを構築せよ:
- を満たすような の組がちょうど 個ある
制約
考えたこと
とりあえず一つ思うこととして、 は全部 1 以上なので、 の区間の左端を で固定したとき、
を満たすような は、もし存在するならば、ただ一通りだけ、ということがわかる。複数の に対して が同じ値になることはありえない。
ということで、そういう が存在するような がちょうど 個になるようにすればいいんだ、ということになる。その最も簡単な場合というのは
- A[0] = S (r = 0)
- A[1] = S (r = 1)
- ...
- A[K-1] = S (r = K-1)
というような場合。こうしたとき、 に対しては区間和が にならないようにする必要があるので、残りは とかで埋めておくと安心できる。
ただし、 のときは は を超えてしまうので、その場合だけ 1 にすれば OK。
まとめると、以下の感じで OK。
のとき、 ( が 個)
のとき、 ( が 個)
#include <iostream> using namespace std; int main() { int N, K, S; cin >> N >> K >> S; int rem = S+1; if (rem > 1000000000) rem = 1; for (int i = 0; i < K; ++i) cout << S << " "; for (int i = K; i < N; ++i) cout << rem << " "; cout << endl; }