Skip to content

Commit e8424ba

Browse files
committed
add abc401d.rs
1 parent 768deca commit e8424ba

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed

src/abc/abc401d.rs

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/** THIS IS AN OUTPUT FILE. NOT EDIT THIS FILE DIRECTLY. **/
2+
use proconio::input;
3+
use proconio::marker::*;
4+
use std::marker::PhantomData;
5+
use std::cmp::*;
6+
use std::collections::*;
7+
8+
fn main() {
9+
input! {
10+
n:usize,
11+
k:usize,
12+
mut s:Chars
13+
}
14+
15+
for i in 0..n {
16+
if s[i] != 'o' {
17+
continue;
18+
}
19+
if i > 0 { s[i - 1] = '.' }
20+
if i + 1 < n { s[i + 1] = '.' }
21+
}
22+
23+
let mut v = vec![];
24+
let mut p = !0;
25+
for i in 0..n {
26+
if s[i] == '?' { continue }
27+
if p + 1 != i { v.push((p + 1, i)) }
28+
p = i;
29+
}
30+
if p + 1 != n { v.push((p + 1, n)) }
31+
let m = s.iter().filter(|&&c| c == 'o').count();
32+
if m == k {
33+
s = s.iter().map(|&c| if c == '?' {'.'} else {c}).collect();
34+
} else if m + v.iter().map(|&(l, r)| (r + 1 - l) / 2).sum::<usize>() == k {
35+
for &(l, r) in v.iter() {
36+
if (r - l) & 1 == 0 { continue }
37+
for i in l..r {
38+
s[i] = if (i - l) & 1 == 0 {'o'} else {'.'}
39+
}
40+
}
41+
}
42+
println!("{}", s.into_iter().collect::<String>());
43+
}

0 commit comments

Comments
 (0)