結果
| 問題 |
No.917 Make One With GCD
|
| コンテスト | |
| ユーザー |
akakimidori
|
| 提出日時 | 2019-10-26 05:45:59 |
| 言語 | Rust (1.83.0 + proconio) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 2,000 ms |
| コード長 | 806 bytes |
| コンパイル時間 | 14,593 ms |
| コンパイル使用メモリ | 385,008 KB |
| 実行使用メモリ | 6,944 KB |
| 最終ジャッジ日時 | 2024-06-24 11:08:47 |
| 合計ジャッジ時間 | 14,340 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 32 |
ソースコード
use std::io::Read;
fn gcd(a: u32, b: u32) -> u32 {
if b == 0 {a} else {gcd(b, a % b)}
}
fn run() {
let mut s = String::new();
std::io::stdin().read_to_string(&mut s).unwrap();
let mut it = s.trim().split_whitespace();
let n: usize = it.next().unwrap().parse().unwrap();
let a: Vec<u32> = (0..n).map(|_| it.next().unwrap().parse().unwrap()).collect();
let mut dp = std::collections::BTreeMap::<u32, u64>::new();
for a in a {
let mut next = dp.clone();
for (k, v) in dp {
let k = gcd(k, a);
*next.entry(k).or_insert(0) += v;
}
*next.entry(a).or_insert(0) += 1;
dp = next;
}
if let Some(&v) = dp.get(&1) {
println!("{}", v);
} else {
println!("0");
}
}
fn main() {
run();
}
akakimidori