Skip to content

Commit c61d275

Browse files
authored
Merge pull request #64 from qryxip/ja-all-enabled-add-example
Add more examples
2 parents bca080b + 01734a3 commit c61d275

File tree

4 files changed

+144
-0
lines changed

4 files changed

+144
-0
lines changed

examples/abc169-c.rs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// https://atcoder.jp/contests/abc169/tasks/abc169_c
2+
//
3+
// 以下のクレートを使用。
4+
// - `num`
5+
// - `num-rational`
6+
// - `proconio`
7+
8+
use num::rational::Ratio;
9+
use proconio::input;
10+
11+
// 有理数型である[`num_rational::Ratio<_>`]を使う。
12+
//
13+
// `Ratio<T>`に対する`FromStr`は`"Tの形式"`または`"Tの形式/Tの形式"`を受け付ける。
14+
// よって入力をパースするときはAはそのまま、
15+
// Bは小数点下が2桁で固定なので`(_.replace('.', "") + "/100").parse().unwrap()`とすれば良い。
16+
//
17+
// そして[`.to_integer()`]で「0方向に丸めた整数」が得られるので`(_ * _).to_integer()`を答えとすれば良い。
18+
//
19+
// [`num_rational::Ratio<_>`]: https://docs.rs/num-rational/0.2.4/num_rational/struct.Ratio.html
20+
// [`.to_integer()`]: https://docs.rs/num-rational/0.2.4/num_rational/struct.Ratio.html#method.to_integer
21+
22+
fn main() {
23+
// [`proconio::input!`]で入力を読む。
24+
//
25+
// [`proconio::input!`]: https://docs.rs/proconio/0.3.6/proconio/macro.input.html
26+
input! {
27+
a: Ratio<u64>,
28+
b: String,
29+
}
30+
31+
let b = (b.replace('.', "") + "/100").parse::<Ratio<_>>().unwrap();
32+
println!("{}", (a * b).to_integer());
33+
}

examples/tokiomarine2020-a.rs

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
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[..3]`としてスライスを取得する
29+
// 2. Sを`String`として読み、`s.chars().take(3).collect::<String>()`
30+
// 3. Sを[`proconio::marker::Bytes`]経由で`Vec<u8>`として読み(あるいは`String`から`.into_bytes()`する)、`std::str::from_utf8(&s[..3]).unwrap()`
31+
//
32+
// の2つの方法がある。
33+
//
34+
// [`AsciiStr`]: https://docs.rs/ascii/1.0.0/ascii/struct.AsciiStr.html
35+
// [`usize`の範囲でアクセス可能]: https://docs.rs/ascii/1.0.0/ascii/struct.AsciiStr.html#impl-Index%3CRangeTo%3Cusize%3E%3E
36+
// [`Display`]: https://doc.rust-lang.org/1.42.0/std/fmt/trait.Display.html
37+
// [`proconio::marker::Bytes`]: https://docs.rs/proconio/0.3.6/proconio/marker/enum.Bytes.html
38+
println!("{}", &s[..3]);
39+
}

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: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,13 @@ url = "https://atcoder.jp/contests/abc168/tasks/abc168_e"
275275
matching = "Words"
276276
meta = { using = ["maplit", "num", "proconio"] }
277277

278+
[examples.abc169-c]
279+
type = "Normal"
280+
name = "ABC169 - C - Multiplication 3"
281+
url = "https://atcoder.jp/contests/abc169/tasks/abc169_c"
282+
matching = "Words"
283+
meta = { using = ["num", "proconio"] }
284+
278285
[examples.agc020-c]
279286
type = "Normal"
280287
name = "AGC020: C - Median Sum"
@@ -468,3 +475,17 @@ name = "Sumitomo Mitsui Trust Bank Programming Contest 2019: C - 100 to 105"
468475
url = "https://atcoder.jp/contests/sumitrust2019/tasks/sumitb2019_c"
469476
matching = "Words"
470477
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