AGC018 : AtCoder Grand Contest 018 の A を解いた。
- A - Getting Difference
https://atcoder.jp/contests/agc018/tasks/agc018_a
- 提出: https://atcoder.jp/contests/agc018/submissions/39092457
GCD(A)
を考えたとき、当然A_i
はGCD(A)
の倍数であり、操作によってA_i
から任意の個数のGCD(A)
を引いた値をつくれる、つまり一度GCD(A)
をつくってしまえばMAX(A)
までの任意のGCD(A)
の倍数を生成できる- 操作を繰り返すとユークリッドの互除法を実現できるので
GCD(A)
を得られる K <= MAX(A) && K % GCD(A) == 0
ならつくれる対象のK
になる
use proconio::input; fn gcd(n: usize, m: usize) -> usize { if m == 0 { n } else { gcd(m, n % m) } } fn main() { input! { n: usize, k: usize, a: [usize; n], }; let max_a = a.iter().copied().max().unwrap(); let mut g = a[0]; for a_i in a.iter().copied().skip(1) { g = gcd(g, a_i); } let ans = k <= max_a && k % g == 0; println!("{}", if ans { "POSSIBLE" } else { "IMPOSSIBLE" }); }
子どもを眼科へ。ふたりを連れていくと疲れる。
なんだかのどが痛い。
今日のコミット。
- rust-sandbox 1 commit
- rust-atcoder 1 commit