結果
問題 | No.430 文字列検索 |
ユーザー | Blue_S |
提出日時 | 2024-02-01 21:00:21 |
言語 | Rust (1.77.0 + proconio) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,338 bytes |
コンパイル時間 | 13,329 ms |
コンパイル使用メモリ | 378,516 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-11-10 01:10:19 |
合計ジャッジ時間 | 17,887 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 1 ms
5,248 KB |
testcase_01 | WA | - |
testcase_02 | WA | - |
testcase_03 | WA | - |
testcase_04 | WA | - |
testcase_05 | RE | - |
testcase_06 | WA | - |
testcase_07 | WA | - |
testcase_08 | WA | - |
testcase_09 | RE | - |
testcase_10 | WA | - |
testcase_11 | WA | - |
testcase_12 | WA | - |
testcase_13 | WA | - |
testcase_14 | WA | - |
testcase_15 | WA | - |
testcase_16 | WA | - |
testcase_17 | WA | - |
ソースコード
use proconio::{input, marker::Bytes}; fn main() { input! { s: Bytes, m: usize, c: [Bytes; m], } let rh = RollingHash::build(s.clone()); let mut crh = vec![]; for i in 0..m { let tmp = RollingHash::build(c[i].clone()); crh.push(tmp); } let mut ans = 0; for i in 0..m { let len = c[i].len(); for j in 0..s.len() - len { if crh[i].get(0, c[i].len()) == rh.get(j, j + len) { ans += 1; } } } println!("{ans}"); } const MOD: usize = 999_999_937; const BASE: usize = 3491; #[allow(unused)] struct RollingHash { s: Vec<u8>, prefix: Vec<usize>, power: Vec<usize>, } #[allow(unused)] impl RollingHash { pub fn build(s: Vec<u8>) -> Self { let n = s.len(); let mut prefix = vec![0; n + 1]; let mut power = vec![1; n + 1]; for i in 0..n { let c = (s[i] - b'a' + 1) as usize; prefix[i + 1] = (prefix[i] * BASE + c) % MOD; power[i + 1] = (power[i] * BASE) % MOD; } RollingHash { s: s, prefix: prefix, power: power, } } pub fn get(&self, l: usize, r: usize) -> usize { (self.prefix[r] - self.power[r - 1] * self.prefix[l]) % MOD } }