File tree Expand file tree Collapse file tree 3 files changed +103
-0
lines changed
Expand file tree Collapse file tree 3 files changed +103
-0
lines changed Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff line change @@ -475,3 +475,17 @@ name = "Sumitomo Mitsui Trust Bank Programming Contest 2019: C - 100 to 105"
475475url = " https://atcoder.jp/contests/sumitrust2019/tasks/sumitb2019_c"
476476matching = " Words"
477477meta = { 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" ] }
You can’t perform that action at this time.
0 commit comments