From 24f2884c1698860918eb9839ad5f60a25ae836d8 Mon Sep 17 00:00:00 2001 From: bouzuya Date: Wed, 6 Mar 2024 22:29:42 +0900 Subject: [PATCH] past16-open j --- .../contests/past16-open/src/bin/j.rs | 56 +++++++++++++++++-- 1 file changed, 52 insertions(+), 4 deletions(-) diff --git a/cargo-atcoder-1.70.0/contests/past16-open/src/bin/j.rs b/cargo-atcoder-1.70.0/contests/past16-open/src/bin/j.rs index 2a9506c8..4995c807 100644 --- a/cargo-atcoder-1.70.0/contests/past16-open/src/bin/j.rs +++ b/cargo-atcoder-1.70.0/contests/past16-open/src/bin/j.rs @@ -1,10 +1,58 @@ -use proconio::{input, marker::Usize1}; +use proconio::input; + +fn divisors(n: usize) -> Vec { + let mut d = vec![]; + for i in 1.. { + if i * i > n { + break; + } + if n % i == 0 { + d.push(i); + if i != n / i { + d.push(n / i); + } + } + } + d.sort(); + d +} + +fn gcd(n: usize, m: usize) -> usize { + if m == 0 { + n + } else { + gcd(m, n % m) + } +} fn main() { input! { n: usize, - a: [Usize1; n], + k: usize, + a: [usize; k], }; - let ans = n - a.len(); - println!("{}", ans); + + let mut b = vec![]; + let mut prev = a[0]; + for a_i in a.iter().copied().skip(1) { + b.push(a_i - prev); + prev = a_i; + } + + let mut g = gcd(b[0], if b.len() == 1 { b[0] } else { b[1] }); + for b_i in b { + g = gcd(g, b_i); + } + + let mut ans = vec![]; + for d in divisors(g) { + if (n - 1) * d >= a[k - 1] - a[0] { + ans.push(d); + } + } + + println!("{}", ans.len()); + for a in ans { + println!("{}", a); + } }