Problem
Iteratorゴリ押し。.iter().filter(|x| x % 2 == 0)for文をまわして出力する。
A:submission
Problem
お馴染みの'A' as u8 - 1芸。a[i][j]を足してcharにして出力する。0の時.を出力する、改行の位置に気をつける。
B:submission
Problem
AはAで、BはBでそれぞれusizeの配列を持たせる。全ての値を入れたベクタに一つずつpushしていき、最後にsortする。何番目に含まれているかはベクタのbinary_search(&K)で返されてきたResult型の値をunwrapすることにより得られる。Kが含まれていることは自明なのでif letを使って慎重にならなくても良い、という判断。全体の計算量は多く見積もってもせいぜいO((N+M)+2(N+M)log(N+M))程度であり、じゅうぶん高速に動作する。binary_searchで得られた値は0-based indexで返されるため1-based indexにするために+1することを忘れてはいけない。
C:submission
Problem
呼ばれてない人をqueで管理して呼ばれたがいってない人をvecで管理し、いった人をbinary_searchを使ってO(logN)でindexを探索し、探索したindexの要素をO(N)で消す、ということをしていたらTLEになってしまった。結局HashSetをB木で管理、実装しているBTreeSetを使うことによって実装,ACできた。呼ばれてない人をqueで管理するのはそのままに、いってない人をBTreeSetで管理した。1の時que.pop_front().unwrap()したものをBTreeSetにinsert、2の時xをUsize1で取得し、remove(&x)でいってない人の中からxを消す、3の時BTreeSet.iter().next().unwrap()でBTreeSetの中で最も小さい人を取り出せる。0-based indexを1-based indexにするために+1する。
D:submission