ferinの競プロ帳

競プロについてのメモ

ABC002

プログラムの勉強のために競技プログラムを始めてみようと考えてAtCoderAtCoder Beginner Contest(ABC)に参加してみることにしました。勉強を兼ねて言語は最近始めたPython3でやってみます。まず慣れるためにも過去問(ABC002)を解いてみました。

問題A

2つの数の入力に対して大きい方を出力する問題です。
これならぱっと見ただけで何をするかわかったと思い

l = input().split()
print(max(l))

コードを入力し提出!…見事にWAを出しました。
入力をmapを使って書き直して

i, j = map(int, input().split())
print(max(i, j))

もう一度提出すると…今度は無事ACです。

(上のコードどこがだめだったんだろう…?)

問題B

入力された文字列から母音を取り除いて出力する問題です。Pythonにはreplaceという関数があったのでreplace("a", "")と母音をすべて空白文字で置き換えて出力しました。Python文字列操作マスターを参考に文字列周りの操作を勉強しました。

問題C

受験期によく使った次の3点(0, 0)(a, b)(c, d)の三角形の面積を求める公式 |ad−bc|⁄2 を適用して出力しました。

問題D

どうすれば効率の良いアルゴリズムになるのか考えたんですがforループ何重にもなるようなものしか思い浮かばずギブアップ… 解説を見て10^3程度ならば確かに全探索したほうが早いと納得です。深さ優先探索の要領で全探索を行い一番人数が多かった組み合わせを求めて出力しました。


一通り解いてみてもうちょっとPythonアルゴリズムの実装に慣れなければと実感しました。第一目標として深さ・幅優先探索、DPなどのアルゴリズムの実装などを数を解いて慣れていきたいと思います。