どうも、takanaです。
ここ最近AtCoderにはまっていました。
AtCoderとは?
日本の競技プログラミングサイトです。
C++を使う人が多いっぽいですが、自分はpythonしか使えないのでpythonで頑張ります。
コンテストに参加しての感想とか
とりあえず一番日程が近いAtCoder Beginner Contest 200に参加しました。
A問題
基本的にどの回もA問題は基本的な文法ができていれば解ける感じです。
今回の問題は西暦N年は何世紀か答える問題です。
入力は、
N = int(input())
で取得できます。
自分は条件分けとかしましたが、(N+99)/100(小数点以下切り捨て)で済む問題でした。
B問題
B問題は指示に素直に従うようなプログラムを書けばOKだと思います。
数字が二つ、空白スペース区切りで与えられるので、
N,K = map(int,input().split())
で取得します。
C問題
C - Ringo's Favorite Numbers 2
C問題は実行時間制限を気にする必要があります。
問題に素直に従っているとTLE(実行時間制限超過)でミスになります。
ループの回数を減らすなどの工夫が必要になります。
numbaというライブラリで高速化を試みることができますが、C問題の場合は使う必要はないと思います(使っても解法がよくないとTLEになると思う)。
今回は数字のリストが与えられ、2つの数字の差が200の倍数になる組を見つけるという問題です。
素直に解くとあり得る組を全て試すことになりますが、N個のリストの場合、nC2通り、つまりn×(n-1)/2通りとなるので問題の条件的に時間不足になってしまいます。
200で割った余りでリストの数字を分類し、新しいリスト内であり得る組み合わせの数を数えればOKです。
注)(200*X+Z) - (200*Y+Z )= 200*(X-Y) より200で割った余りが等しいものの差は必ず200の倍数になります。
D問題以降
ここからは解けませんでした。
D問題以降はアルゴリズムの勉強が必要かなと思います。
結果
灰色になりました(一番下のランク)。
ただ、パフォーマンスは400超えてた(一個上の茶色相当のはず)ので、当面は茶色目指して頑張りたいと思います。
ブログランキング
投げ銭
VIPSアドレス:VGeWZ76u5V1byPtLHyNjDCXRSu48NxmH8c
ヌクモリンク:このブロガーに1000 VIPS を送る!
(ヌクモリンクの導入はここからどうぞ)
Discord
[VIPSTARCOIN]
[VIPSフリマ・オークション](当ブログの発祥地)