A - Circle Pond
入力:
出力: 半径 の円の周長
制約:
求めるものは、 です。
auto R = readAs!real; writeln(2*R*PI);
感想: "%.4f" とかしなくても大丈夫です。
B - Homework
入力:
出力: 高橋君が遊ぶことのできる日数、または、'-1'
制約:
複数の宿題を同日にすることはできないので、全ての宿題を終わらせるのに必要な日数は です。
したがって、 が非負ならその値、負なら が答えです。
auto ip = readAs!(int[]), N = ip[0], M = ip[1]; auto A = readAs!(int[]); auto S = A.sum; if(N - S < 0) writeln(-1); else writeln(N-S);
感想: やるだけ。
C - management
入力:
出力: 各社員に直属する部下の人数
制約:
m[社員A] = 社員Aの直属の部下の配列 として考えます。
auto N = ri; auto A = readAs!(int[]); int[][] m = new int[][](N); foreach(i, v; A) { m[v-1] ~= i.to!int; } foreach(i; 0..N) { m[i].length.writeln; }
感想: C問題にしては簡単?
D - Sum of Large Numbers
入力:
出力: 条件を満たすものの個数
制約:
- 入力は全て整数
まず、 について考えてみます。 の最大値は であるから、1からNの整数の総和の最大値は です。したがって、 に対して、選んだ整数の総和が影響しないことがわかります。
また、 とおくと、 個の数を選ぶときの和としてあり得るものは で表されます。したがって、これらより「それぞれの で作れる和は、他の の値のときと被ることはない」といえます。
これ以降は、 のことを無視します。
とします。
個の数を選ぶとき、その和としてあり得るものの最小値は、 です。
個の数を選ぶとき、その和としてあり得るものの最大値は、 です。
したがって、 個の数を選ぶとき、その和としてあり得るものの個数は、 です。
実装上は、 でこれらの値を求め、最後に の分の を答えに足します。
auto ip = readAs!(int[]), N = ip[0], K = ip[1]; long su(ulong n) { return n * (n + 1) / 2; } long res; const long MOD = 1000000007; foreach(k; K..N+1) { auto m = su(N) - su(N-k) - su(k-1); res += m+1; res %= MOD; } (res+1).writeln;
感想: 添字ゲームに時間をかけすぎた。
A: Submission #12082896 - AtCoder Beginner Contest 163
B: Submission #12082483 - AtCoder Beginner Contest 163
C: Submission #12092478 - AtCoder Beginner Contest 163
D: Submission #12130748 - AtCoder Beginner Contest 163