ブログ名

競技プログラミングやお歌のお話をする高菜です。

AOJ-ICPC 100 点問題の練習です。

記事を書く前に解いた 7 問です。

f:id:ngtkana:20200821224532p:plain

2020-08-21

f:id:ngtkana:20200821222327p:plain

8 / 24 Keitai Message

http://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=4779575#1

9 / 24 お姫様のギャンブル

http://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=4779593#1

AOJ−ICPC さん、はじめは(主にコンパイルを通すのが)かなり辛かったのですが、なれてきました。(?)

10 / 24 koukyoukoukokukikou

http://judge.u-aizu.ac.jp/onlinejudge/user.jsp?id=ngtkana#1

std::iter::dedup_by_key をつかいました。

まず浮かんだのは itertools::Itertools::group_by です。Itertools の自作は、アルゴリズム的な難しさとの相対で、かなり骨が折れそうですから、できれば使わせていただきたい気持ちです。

11 / 24 被験者の選定

http://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=4779732#1

no method named copied in std::slice::iter ですって?

Vec<_>` を入力できるようにしました。

        pub fn read_vec<T: ::std::str::FromStr>(&mut self, len: usize) -> Vec<T>
        where
            <T as ::std::str::FromStr>::Err: ::std::fmt::Debug,
        {
            (0..len).map(|_| self.read::<T>()).collect()
        }

Itertools が使えないのが辛いので、それに似たものを追加し始めました。 いまのところは ajacent のみです。

impl<I: Iterator> Seq for I {}

pub trait Seq: Iterator + Sized {
    fn adjacent(self) -> Adjacent<Self, Self::Item>
    where
        Self::Item: Clone,
    {
        adjacent(self)
    }
}

2020-08-22

f:id:ngtkana:20200822121030p:plain

12 / 24 幸運の操作者

http://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=4780441#1

13 / 24 入学試験

ない

error[E0425]: cannot find function `Reverse` in module `std::cmp` 

しかし、すでにとっくに標準に入っているものを AOJ のためだけに作るのも億劫ですし、うーん。ただよく使うものですから、作っても良いかもしれません。

http://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=4780511#1

14 / 24 Kagisys

入力を HashMap 等の FromIterator な型でジェネリックに受け取れると嬉しそうかなと思ったのですが、そこまで困っているわけではありませんから、先送りです。

http://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=4780529#1

15 / 24 次期町長

はじめ意味がよくわからなくて飛ばしていたのを回収しました。AOJ-ICPC に慣れてきました。

http://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=4780543#1

2020-08-26

16 / 24 踏み台昇降

やっっぱり adjacent() は作ってよかったです。使用頻度がとてもたかいです。

let ans = a
    .iter()
    .adjacent()
    .filter(|(s, t)| s.as_bytes()[1] == t.as_bytes()[1])
    .count();

はい、恒例のコンパイルエラーのコーナーです。当時は参照周りのパターンマッチの柔軟性が少なかったようですね。(むしろ今なぜできるのかよくわかっていないのですが、参照周りの便利な謎型強制シリーズでしょうか。)

error[E0308]: mismatched types --> rep/code.rs:127:22 | 127 | .filter(|(s, t)| s.as_bytes()[1] == t.as_bytes()[1]) | ^^^^^^ expected reference, found tuple | = note: expected type `&(&std::string::String, &std::string::String)` found type `(_, _)` error: aborting due to previous error

17 / 24 太郎君の買物

http://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=4796249

こういうたぐい、しゃくとり法は辛いですが、全探索ならば悪くないかもです。

if let Some(ans) = a
    .iter()
    .enumerate()
    .map(|(i, &x)| a[i + 1..].iter().map(move |&y| x + y))
    .flat_map(|z| z)
    .filter(|&z| z <= cap)
    .max()

ちなみに恒例の警告です。

warning: called `flat_map(|x| x)` on an `Iterator`

18 / 24 When Can We Meet?

http://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=4796574

ついに迎合してしまいました。

pub struct Reverse<T>(pub T);

19 / 24 所得格差

http://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=4796588#1

20 / 24 Get Many Persimmon Trees

http://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=4797102#1

ngtio を新しくしたい気持ちになりました。MutexOnce を駆使してグローバルに標準出力をポン起きすることはできましたから、今回のところはいったんやめです。またがんばりましょう。

21 / 24 阿吽の呼吸

http://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=4797122#1

22 / 24 Koto市営地下鉄

http://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=4797174#1

23 / 24 カレー作り

http://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=4797159#1

24 / 24 改元

http://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=4797201#1

ngtio にプリミティブ用の短縮メソッドをはやしました。

u128 なんてもう自体遅れ了解です。

error: 128-bit type is unstable (see issue #35118)

感想

環境構築をする回という感じでした。