Codeforces 369(#216 Div2 only) B. Valera and Contest
問題
n人がコンテストをした。全員l以上r以下の整数の得点を取った。
全員の得点の合計はsall点。上位k人の得点の合計はsk点である。
このような条件を満たす全員の得点の取り方をどれか一通り出力せよ。
解が存在することは保証されている。
制約条件
n, l, r, k≦1000
sall, sk≦10^6
方針
上位k人はk位の人の得点が最大になるようにするのが最善。
なので、skをkで割って、余りは上位に分配すればいい。
残りsall - sk点も(たとえば同じように)適当に分配すればいい。
解の存在が保証されているので。
ソースコード
int n, k, l, r, sa, sk; int a[1000]; int main(){ cin >> n >> k >> l >> r >> sa >> sk; rep(i, k) a[i] = sk / k + (i < sk % k); sa -= sk; for(int i = k; i < n; i++){ a[i] = sa / (n - k) + (i - k < sa % (n - k)); } rep(i, n) cout << a[i] << (i==n-1?"\n":" "); return 0; }