結果
問題 |
No.3244 Range Multiple of 8 Query
|
ユーザー |
![]() |
提出日時 | 2025-08-22 23:01:53 |
言語 | Rust (1.83.0 + proconio) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,781 bytes |
コンパイル時間 | 12,754 ms |
コンパイル使用メモリ | 398,188 KB |
実行使用メモリ | 46,132 KB |
最終ジャッジ日時 | 2025-08-22 23:02:24 |
合計ジャッジ時間 | 25,181 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 19 WA * 21 |
ソースコード
use proconio::{ input, marker::{Bytes, Usize1}, }; use std::io::Write; fn main() { input! { _n: usize, q: usize, s: Bytes, queries: [(Usize1, usize); q] } let mut writer = std::io::BufWriter::new(std::io::stdout().lock()); let mut v = vec![!0usize; 10]; let mut prev = vec![]; for (i, &d) in s.iter().enumerate() { let d = (d - b'0') as usize; prev.push(v.clone()); v[d] = i; } prev.push(v); let mul8 = (0..1000) .step_by(8) .map(|mut x| { let a = x % 10; x /= 10; let b = x % 10; x /= 10; let c = x % 10; (c, b, a) }) .collect::<Vec<_>>(); let mut right = [0; 10]; for &(l, r) in &queries { let mut ans = usize::MAX; // eprintln!( // "s[{l}..{r}] = {:?}", // String::from_utf8(s[l..r].to_vec()).unwrap() // ); for &(c, b, a) in &mul8 { right.fill(r); let i = prev[right[a]][a]; if i == !0 || i < l { continue; } right[a] = i; let j = prev[right[b]][b]; if j == !0 || j < l { continue; } right[b] = j; let k = prev[right[c]][c]; if k == !0 || k < l { continue; } let mut cand = 3 * r - 6 - i - j - k; cand += (i < j) as usize + (j < k) as usize + (i < k) as usize; // if cand < ans { // eprintln!("{c}{b}{a} at ({k}, {j}, {i}) cand = {cand}"); // } ans = ans.min(cand); } writeln!(writer, "{}", ans as isize).unwrap(); } }