Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 04bf0dc

Browse files
committed
Add examples for tokiomarine2020-{A, C}
1 parent 168e020 commit 04bf0dc

File tree

3 files changed

+103
-0
lines changed

3 files changed

+103
-0
lines changed

examples/tokiomarine2020-a.rs

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
// https://atcoder.jp/contests/tokiomarine2020/tasks/tokiomarine2020_a
2+
//
3+
// 以下のクレートを使用。
4+
// - `ascii`
5+
// - `proconio`
6+
7+
use ascii::AsciiString;
8+
use proconio::input;
9+
10+
fn main() {
11+
// Sを[`ascii::AsciiString`]として、[`proconio::input!`]で入力を読む。
12+
//
13+
// [`ascii::AsciiString`]: https://docs.rs/ascii/1.0.0/ascii/struct.AsciiString.html
14+
// [`proconio::input!`]: https://docs.rs/proconio/0.3.6/proconio/macro.input.html
15+
input! {
16+
s: AsciiString,
17+
}
18+
19+
// [`AsciiStr`] / `AsciiString`は
20+
//
21+
// 1. [`usize`の範囲でアクセス可能]であり**かつ**
22+
// 2. そのまま[`Display`]可能
23+
//
24+
// であることから、このような問題で変換を挟まずに簡潔に書くことができる。
25+
//
26+
// `ascii`クレートを使わずに行うなら、
27+
//
28+
// 1. Sを`String`として読み、`s.chars().take(3).collect::<String>()`
29+
// 2. Sを[`proconio::marker::Bytes`]経由で`Vec<u8>`として読み(あるいは`String`から`.into_bytes()`する)、`std::str::from_utf8(&s[..3]).unwrap()`
30+
//
31+
// の2つの方法がある。
32+
//
33+
// [`AsciiStr`]: https://docs.rs/ascii/1.0.0/ascii/struct.AsciiStr.html
34+
// [`usize`の範囲でアクセス可能]: https://docs.rs/ascii/1.0.0/ascii/struct.AsciiStr.html#impl-Index%3CRangeTo%3Cusize%3E%3E
35+
// [`Display`]: https://doc.rust-lang.org/1.42.0/std/fmt/trait.Display.html
36+
// [`proconio::marker::Bytes`]: https://docs.rs/proconio/0.3.6/proconio/marker/enum.Bytes.html
37+
println!("{}", &s[..3]);
38+
}

examples/tokiomarine2020-c.rs

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
// https://atcoder.jp/contests/tokiomarine2020/tasks/tokiomarine2020_a
2+
//
3+
// 以下のクレートを使用。
4+
// - `itertools`
5+
// - `itertools-num`
6+
// - `proconio`
7+
8+
use itertools::Itertools as _;
9+
use itertools_num::ItertoolsNum as _;
10+
use proconio::input;
11+
use std::cmp;
12+
13+
fn main() {
14+
// [`proconio::input!`]で入力を読む。
15+
//
16+
// [`proconio::input!`]: https://docs.rs/proconio/0.3.6/proconio/macro.input.html
17+
input! {
18+
n: usize,
19+
k: usize,
20+
mut r#as: [usize; n],
21+
}
22+
23+
for _ in 0..k {
24+
// NもAも`usize`で持っておけば、numeric castは一箇所で済む。
25+
26+
let mut imos = vec![0; n + 1];
27+
28+
for (i, &a) in r#as.iter().enumerate() {
29+
let l = i.saturating_sub(a);
30+
let r = cmp::min(i + a + 1, n);
31+
imos[l] += 1;
32+
imos[r] -= 1;
33+
}
34+
35+
// [`itertools_num::ItertoolsNum::cumsom`]を使って`imos`を復元する。
36+
//
37+
// [`itertools_num::ItertoolsNum::cumsom`]: https://docs.rs/itertools-num/0.1.3/itertools_num/trait.ItertoolsNum.html#method.cumsum
38+
r#as = imos[..n].iter().map(|&x| x as usize).cumsum().collect();
39+
40+
if r#as.iter().all(|&a| a == n) {
41+
break;
42+
}
43+
}
44+
45+
// [`itertools::Itertools::format`]でスペース区切りにしたものを`println!`する。
46+
//
47+
// 注意としてこのメソッドの返り値はイテレータを`RefCell<Option<_>>`の形で保持していており、二度displayしようとするとpanicする。
48+
//
49+
// [`itertools::Itertools::format`]: https://docs.rs/itertools/0.9.0/itertools/trait.Itertools.html#method.format
50+
println!("{}", r#as.into_iter().format(" "));
51+
}

test-examples.toml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -475,3 +475,17 @@ name = "Sumitomo Mitsui Trust Bank Programming Contest 2019: C - 100 to 105"
475475
url = "https://atcoder.jp/contests/sumitrust2019/tasks/sumitb2019_c"
476476
matching = "Words"
477477
meta = { using = ["fixedbitset", "proconio"] }
478+
479+
[examples.tokiomarine2020-a]
480+
type = "Normal"
481+
name = "Tokio Marine & Nichido Fire Insurance Programming Contest 2020: A - Nickname"
482+
url = "https://atcoder.jp/contests/tokiomarine2020/tasks/tokiomarine2020_a"
483+
matching = "Words"
484+
meta = { using = ["ascii", "proconio"] }
485+
486+
[examples.tokiomarine2020-c]
487+
type = "Normal"
488+
name = "Tokio Marine & Nichido Fire Insurance Programming Contest 2020: C - Lamps"
489+
url = "https://atcoder.jp/contests/tokiomarine2020/tasks/tokiomarine2020_c"
490+
matching = "Words"
491+
meta = { using = ["itertools", "itertools-num", "proconio"] }

0 commit comments

Comments
 (0)