Skip to content

Commit ca15cc3

Browse files
committed
abc411
1 parent 42c8530 commit ca15cc3

File tree

4 files changed

+303
-0
lines changed

4 files changed

+303
-0
lines changed

code/atcoder/abc411_a.rs

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
use std::io::{self, Read};
2+
use std::str;
3+
4+
pub struct FastReader {
5+
buf: Vec<u8>,
6+
pos: usize,
7+
}
8+
9+
impl FastReader {
10+
/// Create a new FastReader by reading all stdin into an internal buffer
11+
pub fn new() -> Self {
12+
let mut buf = Vec::new();
13+
io::stdin()
14+
.read_to_end(&mut buf)
15+
.expect("Failed to read stdin");
16+
FastReader { buf, pos: 0 }
17+
}
18+
19+
/// Read the next token as a type that implements FromStr
20+
pub fn next<T: str::FromStr>(&mut self) -> T {
21+
// Skip whitespace
22+
while self.pos < self.buf.len()
23+
&& (self.buf[self.pos] == b' '
24+
|| self.buf[self.pos] == b'\n'
25+
|| self.buf[self.pos] == b'\r'
26+
|| self.buf[self.pos] == b'\t')
27+
{
28+
self.pos += 1;
29+
}
30+
// Collect the start
31+
let start = self.pos;
32+
// Find end of token
33+
while self.pos < self.buf.len()
34+
&& !(self.buf[self.pos] == b' '
35+
|| self.buf[self.pos] == b'\n'
36+
|| self.buf[self.pos] == b'\r'
37+
|| self.buf[self.pos] == b'\t')
38+
{
39+
self.pos += 1;
40+
}
41+
// Convert slice to string
42+
let token = &self.buf[start..self.pos];
43+
let s = unsafe { str::from_utf8_unchecked(token) };
44+
s.parse::<T>().ok().expect("Failed parse")
45+
}
46+
}
47+
48+
fn main() {
49+
let mut reader = FastReader::new();
50+
let p: String = reader.next();
51+
let l: usize = reader.next();
52+
53+
println!("{}", if p.len() >= l { "Yes" } else { "No" });
54+
}

code/atcoder/abc411_b.rs

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
use std::io::{self, Read};
2+
use std::str;
3+
4+
pub struct FastReader {
5+
buf: Vec<u8>,
6+
pos: usize,
7+
}
8+
9+
impl FastReader {
10+
/// Create a new FastReader by reading all stdin into an internal buffer
11+
pub fn new() -> Self {
12+
let mut buf = Vec::new();
13+
io::stdin()
14+
.read_to_end(&mut buf)
15+
.expect("Failed to read stdin");
16+
FastReader { buf, pos: 0 }
17+
}
18+
19+
/// Read the next token as a type that implements FromStr
20+
pub fn next<T: str::FromStr>(&mut self) -> T {
21+
// Skip whitespace
22+
while self.pos < self.buf.len()
23+
&& (self.buf[self.pos] == b' '
24+
|| self.buf[self.pos] == b'\n'
25+
|| self.buf[self.pos] == b'\r'
26+
|| self.buf[self.pos] == b'\t')
27+
{
28+
self.pos += 1;
29+
}
30+
// Collect the start
31+
let start = self.pos;
32+
// Find end of token
33+
while self.pos < self.buf.len()
34+
&& !(self.buf[self.pos] == b' '
35+
|| self.buf[self.pos] == b'\n'
36+
|| self.buf[self.pos] == b'\r'
37+
|| self.buf[self.pos] == b'\t')
38+
{
39+
self.pos += 1;
40+
}
41+
// Convert slice to string
42+
let token = &self.buf[start..self.pos];
43+
let s = unsafe { str::from_utf8_unchecked(token) };
44+
s.parse::<T>().ok().expect("Failed parse")
45+
}
46+
}
47+
48+
fn main() {
49+
let mut reader = FastReader::new();
50+
51+
let n: usize = reader.next();
52+
let mut d = vec![0; n - 1];
53+
for i in d.iter_mut() {
54+
*i = reader.next();
55+
}
56+
57+
for i in 0..n {
58+
let mut sum: i32 = 0;
59+
for j in 0..(n - 1 - i) {
60+
sum += d[i + j];
61+
print!("{} ", sum);
62+
}
63+
print!("\n");
64+
}
65+
}

code/atcoder/abc411_c.rs

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
use std::io::{self, Read};
2+
use std::str;
3+
4+
pub struct FastReader {
5+
buf: Vec<u8>,
6+
pos: usize,
7+
}
8+
9+
impl FastReader {
10+
/// Create a new FastReader by reading all stdin into an internal buffer
11+
pub fn new() -> Self {
12+
let mut buf = Vec::new();
13+
io::stdin()
14+
.read_to_end(&mut buf)
15+
.expect("Failed to read stdin");
16+
FastReader { buf, pos: 0 }
17+
}
18+
19+
/// Read the next token as a type that implements FromStr
20+
pub fn next<T: str::FromStr>(&mut self) -> T {
21+
// Skip whitespace
22+
while self.pos < self.buf.len()
23+
&& (self.buf[self.pos] == b' '
24+
|| self.buf[self.pos] == b'\n'
25+
|| self.buf[self.pos] == b'\r'
26+
|| self.buf[self.pos] == b'\t')
27+
{
28+
self.pos += 1;
29+
}
30+
// Collect the start
31+
let start = self.pos;
32+
// Find end of token
33+
while self.pos < self.buf.len()
34+
&& !(self.buf[self.pos] == b' '
35+
|| self.buf[self.pos] == b'\n'
36+
|| self.buf[self.pos] == b'\r'
37+
|| self.buf[self.pos] == b'\t')
38+
{
39+
self.pos += 1;
40+
}
41+
// Convert slice to string
42+
let token = &self.buf[start..self.pos];
43+
let s = unsafe { str::from_utf8_unchecked(token) };
44+
s.parse::<T>().ok().expect("Failed parse")
45+
}
46+
}
47+
48+
fn main() {
49+
let mut reader = FastReader::new();
50+
51+
let n: usize = reader.next();
52+
let q: usize = reader.next();
53+
54+
let mut a = vec![0; n];
55+
56+
let mut ans = 0;
57+
58+
let f = |a: &Vec<i32>, v: usize| -> i32 {
59+
let mut res = 0;
60+
if v >= 1 {
61+
if a[v] != a[v - 1] {
62+
res += 1;
63+
}
64+
} else {
65+
if a[v] == 1 {
66+
res += 1;
67+
}
68+
}
69+
if v + 1 < n {
70+
if a[v] != a[v + 1] {
71+
res += 1;
72+
}
73+
} else {
74+
if a[v] == 1 {
75+
res += 1;
76+
}
77+
}
78+
return res;
79+
};
80+
81+
for _ in 0..q {
82+
let p: usize = reader.next::<usize>() - 1_usize;
83+
84+
ans -= f(&a, p);
85+
a[p] = 1 - a[p];
86+
ans += f(&a, p);
87+
88+
println!("{}", ans >> 1);
89+
}
90+
}

code/atcoder/abc411_d.rs

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
use std::io::{self, Read};
2+
use std::str;
3+
4+
pub struct FastReader {
5+
buf: Vec<u8>,
6+
pos: usize,
7+
}
8+
9+
impl FastReader {
10+
/// Create a new FastReader by reading all stdin into an internal buffer
11+
pub fn new() -> Self {
12+
let mut buf = Vec::new();
13+
io::stdin()
14+
.read_to_end(&mut buf)
15+
.expect("Failed to read stdin");
16+
FastReader { buf, pos: 0 }
17+
}
18+
19+
/// Read the next token as a type that implements FromStr
20+
pub fn next<T: str::FromStr>(&mut self) -> T {
21+
// Skip whitespace
22+
while self.pos < self.buf.len()
23+
&& (self.buf[self.pos] == b' '
24+
|| self.buf[self.pos] == b'\n'
25+
|| self.buf[self.pos] == b'\r'
26+
|| self.buf[self.pos] == b'\t')
27+
{
28+
self.pos += 1;
29+
}
30+
// Collect the start
31+
let start = self.pos;
32+
// Find end of token
33+
while self.pos < self.buf.len()
34+
&& !(self.buf[self.pos] == b' '
35+
|| self.buf[self.pos] == b'\n'
36+
|| self.buf[self.pos] == b'\r'
37+
|| self.buf[self.pos] == b'\t')
38+
{
39+
self.pos += 1;
40+
}
41+
// Convert slice to string
42+
let token = &self.buf[start..self.pos];
43+
let s = unsafe { str::from_utf8_unchecked(token) };
44+
s.parse::<T>().ok().expect("Failed parse")
45+
}
46+
}
47+
48+
#[derive(Clone)]
49+
struct Node {
50+
fid: usize,
51+
s: String,
52+
}
53+
54+
fn main() {
55+
let mut reader = FastReader::new();
56+
57+
let n: usize = reader.next();
58+
let q: usize = reader.next();
59+
60+
let mut x = vec![Node {
61+
fid: 0,
62+
s: "".to_string(),
63+
}];
64+
let mut pid = vec![0 as usize; n + 1];
65+
66+
for _ in 0..q {
67+
let opt_type: i32 = reader.next();
68+
let p: usize = reader.next();
69+
match opt_type {
70+
1 => {
71+
pid[p] = pid[0];
72+
}
73+
2 => {
74+
let s: String = reader.next();
75+
let nid = x.len();
76+
x.push(Node { fid: pid[p], s });
77+
pid[p] = nid;
78+
}
79+
3 => {
80+
pid[0] = pid[p];
81+
}
82+
_ => panic!(),
83+
};
84+
}
85+
86+
fn get_str(id: usize, x: &Vec<Node>) -> String {
87+
if id == 0 {
88+
return "".into();
89+
}
90+
return get_str(x[id].fid, x) + &x[id].s;
91+
}
92+
93+
println!("{}", get_str(pid[0], &x));
94+
}

0 commit comments

Comments
 (0)