結果
問題 |
No.3284 Picnic with Friends
|
ユーザー |
|
提出日時 | 2025-10-10 08:53:50 |
言語 | Rust (1.83.0 + proconio) |
結果 |
AC
|
実行時間 | 1,773 ms / 7,000 ms |
コード長 | 1,774 bytes |
コンパイル時間 | 28,472 ms |
コンパイル使用メモリ | 397,528 KB |
実行使用メモリ | 39,316 KB |
最終ジャッジ日時 | 2025-10-10 08:55:11 |
合計ジャッジ時間 | 77,443 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 26 |
ソースコード
fn getline() -> String { let mut ret = String::new(); std::io::stdin().read_line(&mut ret).unwrap(); ret } fn main() { getline(); let s = getline().trim().split_whitespace() .map(|x| x.parse::<i64>().unwrap()) .collect::<Vec<_>>(); let q = getline().trim().parse::<i32>().unwrap(); let mut last = 0; let mut cur = 0; let mut c = vec![]; for _ in 0..q { let ints = getline().trim().split_whitespace() .map(|x| x.parse::<i64>().unwrap()) .collect::<Vec<_>>(); let [t, f] = ints[..] else { panic!() }; if t > last { if last > 0 { c.push(last - cur); } cur = t; last = t + f; } else { last += f; } } c.push(last - cur); const W: usize = 4_000_000; let mut f = vec![0; W]; let mut big = vec![]; for &c in &c { if c >= W as i64 { big.push(c); } else { f[c as usize] += 1; } } let mut acc = vec![0; W + 1]; for i in 0..W { acc[i + 1] = acc[i] + f[i]; } const B: usize = 1000; let mut prec = vec![0; B]; for i in 1..B { let mut ans = 0; for &c in &c { ans += c / i as i64; } prec[i] = ans; } for &s in &s { if s < B as i64 { println!("{}", prec[s as usize]); } else { let mut ans = 0; for i in 0..=W / s as usize { let hi = W.min((i + 1) * s as usize); ans += (acc[hi] - acc[i * s as usize]) * i as i64; } for &b in &big { ans += b / s; } println!("{ans}"); } } }