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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy