VIPSブログ

記事を書いて5ch発の暗号資産(仮想通貨)「VIPSTARCOIN」を投げ銭してもらう誰でも参加型のブログです

PythonでAtCoder挑戦記

どうも、takanaです。

ここ最近AtCoderにはまっていました。

AtCoderとは?

atcoder.jp

日本の競技プログラミングサイトです。

C++を使う人が多いっぽいですが、自分はpythonしか使えないのでpythonで頑張ります。

 

コンテストに参加しての感想とか

とりあえず一番日程が近いAtCoder Beginner Contest 200に参加しました。

A問題

A - Century

基本的にどの回もA問題は基本的な文法ができていれば解ける感じです。

今回の問題は西暦N年は何世紀か答える問題です。

入力は、

N = int(input())

で取得できます。

自分は条件分けとかしましたが、(N+99)/100(小数点以下切り捨て)で済む問題でした。

B問題

B - 200th ABC-200

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フリマ・オークション](当ブログの発祥地)