Security and Trust are Priceless

Some articles about security and trust: セキュリティやトラストなどに関して、情報を共有することを目的としています

競プロ初参加(AtCoder ABC239)

感想

競プロに初参加しました。 参加しようと思って1年以上も経っていたのですが、twitter眺めてたらコンテスト開催のツイートが流れてきたのでなんとなく参加しました。

言語は大学の授業やコーディングテスト等でも使っていたPythonを選びました。 ここ半年はJavaばっか書いていたので、違和感があったのと、色々忘れていました。 結果としては、A、B、Cの3完で、Dは方針はわかりましたが実装につまづきました。 他の問題は見てすらいませんでした。 浮動小数点型の精度に関する問題とかもあって、開発等でも役に立ちそうと思いました。 競プロのこと考えたらC++, Pythonあたりの言語になると思いますが、GolangPHPとかの今後の個人開発に使う予定の言語のキャッチアップとして使ってもいいのかなと思います。 今のところは競プロは自分にとってアルゴリズムの勉強、コーディング練習、インターン・就活とかの為という位置づけです。

今後の目標は最低限入茶することですね。 ゆくゆくは水色あたりになりたいですね。

Dのふりかえり

可読性とか色々ボロがありますが競プロの解答なので見逃して頂けると幸いです。 ルールを見ると、要は「はよACとれたらええねん」という姿勢でやるのが正解なのかなと思っています。

間違っていた部分は、素数判定部分でした。 素数判定に関しては公式解説のエラトステネスの篩の部分をそのまま組み込みました。 そうしたら全部のテストケースが通ってACになりました。(これで素数判定部分があかんかったことに気付きました) 元々はTakahashiとAokiの選ぶ数字を全探索して、その都度素数判定する関数を実行していたので非効率な処理でした。

参考までにソースを貼っておきます。

def simulate(a,b,c,d):
    prime=[True]*201
    prime[0]=False
    prime[1]=False
    for p in range(15):
        if prime[p]:
            for i in range(p*p,201,p):
                prime[i]=False
    for i in range(a, b+1):
        count =  d - c + 1
        for h in range(c, d+1):
            #print(i,h,count)
            if(prime[i + h] == True):
                break
            else:
                count -= 1
            if(count == 0):
                #print(i)
                return "Takahashi"
    return "Aoki"


if __name__ == '__main__':
    a, b, c, d = map(int, input().split())
    print(simulate(a, b, c, d))