提出 #19087694
ソースコード 拡げる
use std::collections::BTreeMap;
const MASK_30: u64 = (1 << 30) - 1;
const MASK_31: u64 = (1 << 31) - 1;
const MOD: u64 = (1 << 61) - 1;
const BASE: u64 = 1e9 as u64 + 7;
fn main() {
let (r, w) = (std::io::stdin(), std::io::stdout());
let mut sc = IO::new(r.lock(), w.lock());
let n: usize = sc.read();
let k: usize = sc.read();
let s: Vec<usize> = sc
.read::<String>()
.chars()
.map(|c| c as usize - 'a' as usize)
.collect();
let mut base = vec![1; 26];
for i in 1..26 {
base[i] = mod_mul(base[i - 1], BASE);
}
let mut sum = 0;
for i in 0..k {
sum += base[s[i]];
sum %= MOD;
}
let mut sum_hash = vec![sum];
for i in k..n {
sum += base[s[i]];
sum += MOD - base[s[i - k]];
sum %= MOD;
sum_hash.push(sum);
}
let mut sum_count = BTreeMap::new();
for i in 0..(n - k + 1) {
if i >= k {
*sum_count.entry(sum_hash[i - k]).or_insert(0) += 1;
}
let sum_cur = sum_count.get(&sum_hash[i]).cloned().unwrap_or(0);
if sum_cur > 0 {
println!("YES");
return;
}
}
println!("NO");
}
fn mod_mul(a: u64, b: u64) -> u64 {
let (a_prefix, a_suffix) = (a >> 31, a & MASK_31);
let (b_prefix, b_suffix) = (b >> 31, b & MASK_31);
let m = a_suffix * b_prefix + a_prefix * b_suffix;
modulo(a_prefix * b_prefix * 2 + (m >> 30) + ((m & MASK_30) << 31) + a_suffix * b_suffix)
}
fn modulo(v: u64) -> u64 {
let v = (v & MOD) + (v >> 61);
if v >= MOD {
v - MOD
} else {
v
}
}
pub struct IO<R, W: std::io::Write>(R, std::io::BufWriter<W>);
impl<R: std::io::Read, W: std::io::Write> IO<R, W> {
pub fn new(r: R, w: W) -> Self {
Self(r, std::io::BufWriter::new(w))
}
pub fn write<S: ToString>(&mut self, s: S) {
use std::io::Write;
self.1.write_all(s.to_string().as_bytes()).unwrap();
}
pub fn read<T: std::str::FromStr>(&mut self) -> T {
use std::io::Read;
let buf = self
.0
.by_ref()
.bytes()
.map(|b| b.unwrap())
.skip_while(|&b| b == b' ' || b == b'\n' || b == b'\r' || b == b'\t')
.take_while(|&b| b != b' ' && b != b'\n' && b != b'\r' && b != b'\t')
.collect::<Vec<_>>();
unsafe { std::str::from_utf8_unchecked(&buf) }
.parse()
.ok()
.expect("Parse error.")
}
pub fn vec<T: std::str::FromStr>(&mut self, n: usize) -> Vec<T> {
(0..n).map(|_| self.read()).collect()
}
pub fn chars(&mut self) -> Vec<char> {
self.read::<String>().chars().collect()
}
}
提出情報
ジャッジ結果
| セット名 | Sample | Subtask1 | Subtask2 | Subtask3 | Subtask4 | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 得点 / 配点 | 0 / 0 | 15 / 15 | 15 / 15 | 15 / 15 | 55 / 55 | ||||||||||
| 結果 |
|
|
|
|
|
| セット名 | テストケース |
|---|---|
| Sample | subtask0_sample-01.txt, subtask0_sample-02.txt, subtask0_sample-03.txt |
| Subtask1 | subtask0_sample-01.txt, subtask0_sample-02.txt, subtask0_sample-03.txt, subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt, subtask1_08.txt, subtask1_09.txt, subtask1_10.txt, subtask1_11.txt, subtask1_12.txt, subtask1_13.txt, subtask1_14.txt, subtask1_15.txt |
| Subtask2 | subtask0_sample-01.txt, subtask0_sample-02.txt, subtask0_sample-03.txt, subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt, subtask1_08.txt, subtask1_09.txt, subtask1_10.txt, subtask1_11.txt, subtask1_12.txt, subtask1_13.txt, subtask1_14.txt, subtask1_15.txt, subtask2_01.txt, subtask2_02.txt, subtask2_03.txt, subtask2_04.txt, subtask2_05.txt, subtask2_06.txt, subtask2_07.txt, subtask2_08.txt, subtask2_09.txt, subtask2_10.txt, subtask2_11.txt, subtask2_12.txt, subtask2_13.txt, subtask2_14.txt, subtask2_15.txt |
| Subtask3 | subtask0_sample-01.txt, subtask0_sample-02.txt, subtask0_sample-03.txt, subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt, subtask1_08.txt, subtask1_09.txt, subtask1_10.txt, subtask1_11.txt, subtask1_12.txt, subtask1_13.txt, subtask1_14.txt, subtask1_15.txt, subtask2_01.txt, subtask2_02.txt, subtask2_03.txt, subtask2_04.txt, subtask2_05.txt, subtask2_06.txt, subtask2_07.txt, subtask2_08.txt, subtask2_09.txt, subtask2_10.txt, subtask2_11.txt, subtask2_12.txt, subtask2_13.txt, subtask2_14.txt, subtask2_15.txt, subtask3_01.txt, subtask3_02.txt, subtask3_03.txt, subtask3_04.txt, subtask3_05.txt, subtask3_06.txt, subtask3_07.txt, subtask3_08.txt, subtask3_09.txt, subtask3_10.txt, subtask3_11.txt, subtask3_12.txt, subtask3_13.txt, subtask3_14.txt, subtask3_15.txt |
| Subtask4 | subtask0_sample-01.txt, subtask0_sample-02.txt, subtask0_sample-03.txt, subtask1_01.txt, subtask1_02.txt, subtask1_03.txt, subtask1_04.txt, subtask1_05.txt, subtask1_06.txt, subtask1_07.txt, subtask1_08.txt, subtask1_09.txt, subtask1_10.txt, subtask1_11.txt, subtask1_12.txt, subtask1_13.txt, subtask1_14.txt, subtask1_15.txt, subtask2_01.txt, subtask2_02.txt, subtask2_03.txt, subtask2_04.txt, subtask2_05.txt, subtask2_06.txt, subtask2_07.txt, subtask2_08.txt, subtask2_09.txt, subtask2_10.txt, subtask2_11.txt, subtask2_12.txt, subtask2_13.txt, subtask2_14.txt, subtask2_15.txt, subtask3_01.txt, subtask3_02.txt, subtask3_03.txt, subtask3_04.txt, subtask3_05.txt, subtask3_06.txt, subtask3_07.txt, subtask3_08.txt, subtask3_09.txt, subtask3_10.txt, subtask3_11.txt, subtask3_12.txt, subtask3_13.txt, subtask3_14.txt, subtask3_15.txt, subtask4_01.txt, subtask4_02.txt, subtask4_03.txt, subtask4_04.txt, subtask4_05.txt, subtask4_06.txt, subtask4_07.txt, subtask4_08.txt, subtask4_09.txt, subtask4_10.txt, subtask4_11.txt, subtask4_12.txt, subtask4_13.txt, subtask4_14.txt, subtask4_15.txt |
| ケース名 | 結果 | 実行時間 | メモリ |
|---|---|---|---|
| subtask0_sample-01.txt | AC | 7 ms | 1992 KiB |
| subtask0_sample-02.txt | AC | 2 ms | 2152 KiB |
| subtask0_sample-03.txt | AC | 2 ms | 2088 KiB |
| subtask1_01.txt | AC | 2 ms | 1912 KiB |
| subtask1_02.txt | AC | 2 ms | 1960 KiB |
| subtask1_03.txt | AC | 2 ms | 2140 KiB |
| subtask1_04.txt | AC | 2 ms | 2120 KiB |
| subtask1_05.txt | AC | 2 ms | 2072 KiB |
| subtask1_06.txt | AC | 2 ms | 2084 KiB |
| subtask1_07.txt | AC | 2 ms | 1992 KiB |
| subtask1_08.txt | AC | 2 ms | 2092 KiB |
| subtask1_09.txt | AC | 2 ms | 2124 KiB |
| subtask1_10.txt | AC | 2 ms | 2092 KiB |
| subtask1_11.txt | AC | 1 ms | 2164 KiB |
| subtask1_12.txt | AC | 2 ms | 2084 KiB |
| subtask1_13.txt | AC | 2 ms | 2040 KiB |
| subtask1_14.txt | AC | 2 ms | 2064 KiB |
| subtask1_15.txt | AC | 2 ms | 1984 KiB |
| subtask2_01.txt | AC | 4 ms | 2040 KiB |
| subtask2_02.txt | AC | 2 ms | 2108 KiB |
| subtask2_03.txt | AC | 2 ms | 2096 KiB |
| subtask2_04.txt | AC | 2 ms | 2144 KiB |
| subtask2_05.txt | AC | 1 ms | 2048 KiB |
| subtask2_06.txt | AC | 2 ms | 2180 KiB |
| subtask2_07.txt | AC | 1 ms | 2176 KiB |
| subtask2_08.txt | AC | 3 ms | 2076 KiB |
| subtask2_09.txt | AC | 2 ms | 2064 KiB |
| subtask2_10.txt | AC | 2 ms | 2092 KiB |
| subtask2_11.txt | AC | 2 ms | 2076 KiB |
| subtask2_12.txt | AC | 2 ms | 2100 KiB |
| subtask2_13.txt | AC | 2 ms | 2112 KiB |
| subtask2_14.txt | AC | 2 ms | 2148 KiB |
| subtask2_15.txt | AC | 2 ms | 2096 KiB |
| subtask3_01.txt | AC | 2 ms | 2076 KiB |
| subtask3_02.txt | AC | 2 ms | 2120 KiB |
| subtask3_03.txt | AC | 2 ms | 2184 KiB |
| subtask3_04.txt | AC | 2 ms | 2104 KiB |
| subtask3_05.txt | AC | 2 ms | 2064 KiB |
| subtask3_06.txt | AC | 2 ms | 2024 KiB |
| subtask3_07.txt | AC | 2 ms | 1976 KiB |
| subtask3_08.txt | AC | 6 ms | 2112 KiB |
| subtask3_09.txt | AC | 6 ms | 2312 KiB |
| subtask3_10.txt | AC | 3 ms | 2116 KiB |
| subtask3_11.txt | AC | 2 ms | 2188 KiB |
| subtask3_12.txt | AC | 2 ms | 2088 KiB |
| subtask3_13.txt | AC | 2 ms | 2112 KiB |
| subtask3_14.txt | AC | 9 ms | 2200 KiB |
| subtask3_15.txt | AC | 3 ms | 2140 KiB |
| subtask4_01.txt | AC | 2 ms | 2292 KiB |
| subtask4_02.txt | AC | 6 ms | 2468 KiB |
| subtask4_03.txt | AC | 2 ms | 2380 KiB |
| subtask4_04.txt | AC | 5 ms | 2496 KiB |
| subtask4_05.txt | AC | 7 ms | 2536 KiB |
| subtask4_06.txt | AC | 33 ms | 4260 KiB |
| subtask4_07.txt | AC | 25 ms | 4392 KiB |
| subtask4_08.txt | AC | 8 ms | 3740 KiB |
| subtask4_09.txt | AC | 46 ms | 5600 KiB |
| subtask4_10.txt | AC | 9 ms | 3792 KiB |
| subtask4_11.txt | AC | 33 ms | 5120 KiB |
| subtask4_12.txt | AC | 11 ms | 3480 KiB |
| subtask4_13.txt | AC | 27 ms | 4272 KiB |
| subtask4_14.txt | AC | 9 ms | 3396 KiB |
| subtask4_15.txt | AC | 7 ms | 3456 KiB |