blog.bouzuya.net

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_000a_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) != 1gcd(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 はギリギリなので次の周期ではみ出さないように注意する

今日のコミット。