結果
問題 | No.1097 Remainder Operation |
ユーザー |
|
提出日時 | 2020-07-05 00:11:49 |
言語 | Rust (1.83.0 + proconio) |
結果 |
AC
|
実行時間 | 143 ms / 2,000 ms |
コード長 | 1,940 bytes |
コンパイル時間 | 23,579 ms |
コンパイル使用メモリ | 378,684 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-09-19 16:55:48 |
合計ジャッジ時間 | 16,225 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 21 |
ソースコード
fn main() {let mut n = String::new();std::io::stdin().read_line(&mut n).ok();let n: usize = n.trim().parse().unwrap();let mut a = String::new();std::io::stdin().read_line(&mut a).ok();let a: Vec<usize> = a.trim().split_whitespace().map(|s| s.parse().unwrap()).collect();let mut q = String::new();std::io::stdin().read_line(&mut q).ok();let q: usize = q.trim().parse().unwrap();let mut x: usize = 0;let mut uses: Vec<usize> = vec![0];let mut used: Vec<usize> = vec![0; n];let mut count: usize = 1;used[0] = count;while used[(x + a[x % n]) % n] == 0 {x += a[x % n];count += 1;let val = x % n;used[val] = count;uses.push(val);}let geta_count = used[(x + a[x % n]) % n] - 1;let mut geta: Vec<usize> = if geta_count > 0 { vec![0; geta_count] } else { vec![] };let mut loopsum: Vec<usize> = vec![0; count - geta_count];for i in 0..geta_count {if i > 0 {geta[i] = geta[i-1] + a[uses[i]];} else {geta[i] = a[uses[0]];}}for i in geta_count..count {if i > geta_count {loopsum[i-geta_count] = loopsum[i-geta_count-1] + a[uses[i]];} else {loopsum[i-geta_count] = a[uses[i]];}}for _ in 0..q {let mut k = String::new();std::io::stdin().read_line(&mut k).ok();let k: usize = k.trim().parse().unwrap();let mut result = 0usize;if geta_count > 0 {result = if k > geta_count { geta[geta_count-1] } else { geta[k-1]};}if k > geta_count {result += (k - geta_count) / loopsum.len() * loopsum[loopsum.len()-1];if (k - geta_count) % loopsum.len() > 0 {result += loopsum[(k - geta_count) % loopsum.len() - 1];}}println!("{}", result);}}