ABC 087を解いてみた

競技プログラミングをやってみたいと思っているので、AtCoderAtCoder Beginner Contest 087をやりました(過去問)。

AtCoder Beginner Contest 087 - AtCoder

結果

結果は、時間は特に気にせずやりましたが、A-Cまでは特に問題なく解けた。Dは今回はとりあえず手をつけていない。

反省

・まあまだbeginner用というのもあって、最初なら普通にきちんと問題文を読めば解ける。気持ち的にまだ慣れていない。焦っている。

・そもそも、C++でのプログラムの実装に慣れていない。出力どうするんだっけとか、if文どうやって書くんだっけとか。非効率性を生み出す原因になるから、C++自体の勉強も進めるべきだ。(別に他の言語でもよいのだけど)

→今日少しC++の勉強もした。

解説を読んで

・A問題:普通に、余りを求めればよかった。特に問題なし。

・B問題:問題としては、全ての場合でループを回せばよい。特に問題なし。コードの書き方としては、

 #include<cstdio>
using namespace std;

 

と最初にしていた(いまいち呪文の意味分かってない)。

あと、

int solve(){

// *code*//

return ans;

とした後に、

int main(){

// *code*//

 ans = solve();

// *code* //

return 0;

}

 

としてsolveを呼び出すやり方を取ってる。

後入力出力の仕方

scanf("%d%d%d%d", &A, &B, &C, &X);
int ans = solve();
printf("%d\n", ans);

 

などやってる。

 

・C問題:この問題もstraightforwardだった。実際のコーディングでは、配列の読み込み方が良く分からなくて手間取った。

・D問題:なんか適当に行列作って行列のランク求めればよくない?とか思っていたのだけど、解説では重み付き有向グラフとかいうのを考えている。強そうな言葉にビビッているだけか。深さ優先探索幅優先探索とかいうのをやればよいらしい。ここら辺を勉強してみよう。前より出来る気がする。きっとアリさんの本とかに載っているよね。

http://amzn.asia/5FBDOIx

 

・E,F問題は、とりあえずARCの範囲なので今回は無視。動的計画法とか、また強そうなワードが見える。面白そうだけど、また今度。

調べたいこと

  1. 最初の呪文include<cstdio>の意味
  2. solve()関数を読み出すとか、c++で関数を読み出すやり方など
  3. 入出力の形式とかも忘れた
  4. 重み付き有効グラフについて(グラフ理論全般?てかグラフ理論の話だよね)
  5. 深さ優先探索について
  6. 幅優先探索について

4-6については直感的な理解が出来て、実装が出来るようになるとなおよし。とりあえず今回のD問題がきちんと解けるようになりましょう。

 

思ったより出来そうな気がする。競技プログラミング強い人になりたい。