tshimizu's diary

日々の記録

競プロの記録 (2016_09_07)

1問目:yukicoder_No.005

No.5 数字のブロック - yukicoder

配列Wを昇順ソートして、小さいほうから埋めていくだけ。
配列の要素を指定する変数と、現在の箱の個数を記憶しておく変数に同じものを使っていたため詰まった。
一つの変数に複数の意味を持たせるのはバグの元。

2問目:yukicoder_No.018

No.18 うーさー暗号 - yukicoder

負の値の剰余をとってもうまくいくようにする方法があるらしい。
割る数の巨大な倍数をあらかじめ足しておくという方法。
今回の場合は次のようなコードになる。
再解答リストに追加。

tmp = (26000 + (s[i] - 'A') - (i + 1)) % 26 + 'A';

まだこの方法には慣れていないので、数をこなして自然に使えるようにしたい。

3問目:yukicoder_No.021

No.21 平均の差 - yukicoder

グループが3個以上のため、平均が最小、最大の集合は、それぞれ要素数1になる。
従って、今回は最大値と最小値の差をとるだけでよい。
問題文と例の文章に騙されて余計なことをやっていた。
また、この問題では結局必要なかったが、整数型を四捨五入する方法を作った。
割る数と割られる数をそれぞれ10倍したうえで計算する。それに5を加算して、10で割る。
そのほかにも、先にdouble型で計算しておいて、0.5を足してintでキャストする方法もある。

4問目:yukicoder_No.022

No.22 括弧の対応 - yukicoder

文字列を先頭から見ていく。
左括弧に出会ったときは、第一引数にその位置、第二引数にその左括弧に対応する右括弧の位置(とりあえず-1にしておく)を持つpairを、
stackにpushする。
右括弧に出会ったときは、topの第二引数にそこの位置を入れて、topをsetにinsertした後、popする。
文字列を終わりまで探索すると、括弧の対応位置を要素に持つsetができる。
Kに対応するsetの要素にアクセスすれば答えが出せる。

5問目:ABC043_C

C: いっしょ / Be Together - AtCoder Beginner Contest 043 | AtCoder

変換先の数字をすべて試すだけ。

6問目:ABC039_C

C: ピアニスト高橋君 - AtCoder Beginner Contest 039 | AtCoder

あらかじめ、ドから順に並んだW,Bの文字列を連結させたものを長めに作っておく。
入力文字列を頭の方から順に、substrで20文字分抜き出し、事前に作った文字列とどこで一致するか調べる。
音の名称を入れた配列に、発見位置のMOD12でアクセスすれば答えになる。
文字数の比的に、入力文字列に必ずしもドから始まる標準文字列が入っているわけではないことに注意。

基礎的な問題(yukicoderの☆1とか)で時間を想像以上に使う。明日からは簡単な問題を多めにして、基礎体力とスピード感をつける。
A予選まであと17日。