ABC 087を解いてみた
競技プログラミングをやってみたいと思っているので、AtCoderのAtCoder 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問題:なんか適当に行列作って行列のランク求めればよくない?とか思っていたのだけど、解説では重み付き有向グラフとかいうのを考えている。強そうな言葉にビビッているだけか。深さ優先探索や幅優先探索とかいうのをやればよいらしい。ここら辺を勉強してみよう。前より出来る気がする。きっとアリさんの本とかに載っているよね。
・E,F問題は、とりあえずARCの範囲なので今回は無視。動的計画法とか、また強そうなワードが見える。面白そうだけど、また今度。
調べたいこと
- 最初の呪文include<cstdio>の意味
- solve()関数を読み出すとか、c++で関数を読み出すやり方など
- 入出力の形式とかも忘れた
- 重み付き有効グラフについて(グラフ理論全般?てかグラフ理論の話だよね)
- 深さ優先探索について
- 幅優先探索について
4-6については直感的な理解が出来て、実装が出来るようになるとなおよし。とりあえず今回のD問題がきちんと解けるようになりましょう。
思ったより出来そうな気がする。競技プログラミング強い人になりたい。