2022-07-22 AGC022 の B を解いた
AGC022 : AtCoder Grand Contest 022 の B を解いた。
- B - GCD Sequence
https://atcoder.jp/contests/agc022/tasks/agc022_b
- 提出: https://atcoder.jp/contests/agc022/submissions/33408953
- 解説 AC
- 素数を列挙して……かと思ったけど
N <= 20_000
でa_i <= 30_000
なので厳しい gcd(S) = 1
は 2, 3 を含めれば良さそうgcd(a_i, sum(S) - a_i) != 1
をどうするか 6 (2 と 3 の両方) の倍数になれば良い ?- このあたりで断念
gcd(a_i, sum(S) - a_i) != 1
はgcd(a_i, sum(S)) != 1
で良い- a_1 (=2), a_2 (=3) 以外を 6 の倍数 (mod 6) で考えると 0..6 のうち 0, 2, 3, 4 で 4/6 はとれるので 30_000 で 20_000 がとれそう
- 先頭から列挙すると、 2, 3, 4, 6, 8 (6+2), 9 (6+3), ... と続く
- 1 周期未満は調整が効かないのでなんとかする
3 <= N < 6
(1 周期未満) のうち 3, 4 は入力例から取れる- 5 は 2, 5, 20, 63 から手計算で 2, 5, 20, 30, 63 が求められる
- 1 周期以上ある場合は調整が効く。和として出てくるのは 0, 2, 3, 5 (mod 6)
- 0 は何もしなくて良い
- 2 なら 2 ( 1 周期分はあるので 8 (6+2) を除く) を除いて次の 0 を加えると 0 になる
- 3 なら 3 ( 1 周期分はあるので 9 (6+3) を除く) を除いて次の 0 を加えると 0 になる
- 5 なら 3 ( 1 周期分はあるので 9 (6+3) を除く) を除いて次の 4 を加えると 0 になる
- 30_000 はギリギリなので次の周期ではみ出さないように注意する
今日のコミット。