結果
問題 | No.1036 Make One With GCD 2 |
ユーザー | tonyu0 |
提出日時 | 2020-04-25 10:03:07 |
言語 | Rust (1.77.0 + proconio) |
結果 |
TLE
(最新)
AC
(最初)
|
実行時間 | - |
コード長 | 1,962 bytes |
コンパイル時間 | 13,326 ms |
コンパイル使用メモリ | 379,224 KB |
実行使用メモリ | 93,696 KB |
最終ジャッジ日時 | 2024-09-16 13:39:20 |
合計ジャッジ時間 | 32,323 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 309 ms
92,800 KB |
testcase_01 | AC | 256 ms
89,088 KB |
testcase_02 | AC | 219 ms
93,696 KB |
testcase_03 | AC | 77 ms
31,232 KB |
testcase_04 | AC | 141 ms
55,936 KB |
testcase_05 | AC | 1 ms
5,376 KB |
testcase_06 | AC | 1 ms
5,376 KB |
testcase_07 | AC | 110 ms
37,376 KB |
testcase_08 | AC | 82 ms
30,848 KB |
testcase_09 | AC | 339 ms
86,912 KB |
testcase_10 | AC | 333 ms
80,896 KB |
testcase_11 | AC | 349 ms
88,576 KB |
testcase_12 | AC | 335 ms
81,792 KB |
testcase_13 | AC | 475 ms
89,088 KB |
testcase_14 | AC | 481 ms
89,984 KB |
testcase_15 | AC | 447 ms
84,352 KB |
testcase_16 | AC | 452 ms
84,992 KB |
testcase_17 | AC | 467 ms
87,680 KB |
testcase_18 | AC | 2 ms
5,376 KB |
testcase_19 | AC | 1 ms
5,376 KB |
testcase_20 | AC | 2 ms
5,376 KB |
testcase_21 | AC | 2 ms
5,376 KB |
testcase_22 | AC | 446 ms
83,456 KB |
testcase_23 | AC | 334 ms
61,824 KB |
testcase_24 | AC | 461 ms
86,656 KB |
testcase_25 | AC | 418 ms
79,104 KB |
testcase_26 | AC | 451 ms
81,920 KB |
testcase_27 | AC | 1 ms
5,376 KB |
testcase_28 | AC | 1 ms
5,376 KB |
testcase_29 | AC | 1 ms
5,376 KB |
testcase_30 | AC | 1 ms
5,376 KB |
testcase_31 | AC | 1 ms
5,376 KB |
testcase_32 | AC | 1 ms
5,376 KB |
testcase_33 | AC | 1 ms
5,376 KB |
testcase_34 | AC | 1 ms
5,376 KB |
testcase_35 | AC | 1 ms
5,376 KB |
testcase_36 | AC | 1 ms
5,376 KB |
testcase_37 | AC | 1 ms
5,376 KB |
testcase_38 | AC | 211 ms
93,312 KB |
testcase_39 | AC | 316 ms
93,312 KB |
testcase_40 | AC | 333 ms
61,696 KB |
testcase_41 | AC | 1,801 ms
93,312 KB |
testcase_42 | AC | 1,691 ms
93,312 KB |
testcase_43 | AC | 1,912 ms
93,440 KB |
testcase_44 | TLE | - |
ソースコード
use std::io::*; mod sparse_table { pub struct SparseTable<T, F> { table: Vec<Vec<T>>, func: F, } impl<T: Copy + Clone, F: Fn(T, T) -> T> SparseTable<T, F> { pub fn new(a: &Vec<T>, id: T, f: F) -> SparseTable<T, F> { let n = a.len(); let max_log = (32 - (n as u32).leading_zeros()) as usize; let mut table = vec![vec![id; n]; max_log]; table[0] = a.clone(); for j in 1..max_log { for i in 0..n - (1 << j) + 1 { table[j][i] = f(table[j - 1][i], table[j - 1][i + (1 << (j - 1))]); } } SparseTable { table: table, func: f, } } pub fn get(&self, from: usize, to: usize) -> T { assert!(from <= to && to <= self.table[0].len() - 1); let lg = (32 - ((to - from + 1) as u32).leading_zeros() - 1) as usize; (self.func)(self.table[lg][from], self.table[lg][to + 1 - (1 << lg)]) } } } fn gcd(a: u64, b: u64) -> u64 { if b == 0 { return a; } gcd(b, a % b) } fn main() { let mut s: String = String::new(); std::io::stdin().read_to_string(&mut s).ok(); let mut itr = s.trim().split_whitespace(); let n: usize = itr.next().unwrap().parse().unwrap(); let a: Vec<u64> = (0..n) .map(|_| itr.next().unwrap().parse().unwrap()) .collect(); let st = sparse_table::SparseTable::new(&a, 1, gcd); let mut ans = a.iter().filter(|&e| *e == 1).count(); for i in 0..n { if st.get(i, n - 1) != 1 { continue; } let mut ng = i; let mut ok = n; while ok - ng > 1 { let mid = (ok + ng) >> 1; if st.get(i, mid) == 1 { ok = mid } else { ng = mid } } ans += n - ok; } println!("{}", ans); }