1日目:Beginner20

1日目(2019/8/14)

AtCoder Beginner Contest 20

なんで1からじゃないの?って言われると1のページにあとから解いたほうがいいよって書いてあったからw

解けた問題 AB

A:クイズ

これは流石に問題なかったです。
int型を受け取ってその数で分岐。

B:足し算

整数を2つ入力して連結して二倍に。
文字列に変換して連結、整数に戻して2倍にすれば良さそう。
で、C++って文字列を数値変換するってどうやるんだっけ?
で調べた結果stringインクルードして、

to_string(A)

で数値に変換できるみたい。今までもこうやってたっけ?ってくらい文字列処理するプログラム書いてない。焦る。

タイムアップした問題 C:壁抜け

とりあえず、入力H,W,Tを受け取って、 盤面を受け取るためのchar**を動的に確保、Sの位置とGの位置を保存。 とりあえず部分点を狙うつもりで、S->Gへの最短ルートを考えてそこに含まれる黒(#)の数を数えるかって思ったけど、 そこでどうやって全ルート網羅しようか考えていたらタイムアップ、30分短いな。

C問題について解説も見つつ考えてみる。

部分点を狙うなら全探索しても時間は大丈夫というのは予想通りだけど、黒の数を数えるんじゃなくて、時間を減らしていってはじめに通ったときにそれが最短だと出す方針みたい。 その場合はDFS(深さ優先探索)が使える、さあ知識としてはしってるけど実装したことないぞ。(少し考えるから実装できたら明日の記事に)

わかったかもしれないけれど

これくらいにはプログラムかけません、しばらくは30分以内にC問題が解けるようになるくらいが目標かも…。

参考文献

C++11で数字→文字列はstd::to_string()、文字列→数字はstd::stoi()とかstd::stod()とかurl [C++] new による多次元配列の動的作成 url