感想
競プロに初参加しました。 参加しようと思って1年以上も経っていたのですが、twitter眺めてたらコンテスト開催のツイートが流れてきたのでなんとなく参加しました。
言語は大学の授業やコーディングテスト等でも使っていたPythonを選びました。 ここ半年はJavaばっか書いていたので、違和感があったのと、色々忘れていました。 結果としては、A、B、Cの3完で、Dは方針はわかりましたが実装につまづきました。 他の問題は見てすらいませんでした。 浮動小数点型の精度に関する問題とかもあって、開発等でも役に立ちそうと思いました。 競プロのこと考えたらC++, Pythonあたりの言語になると思いますが、Golang、PHPとかの今後の個人開発に使う予定の言語のキャッチアップとして使ってもいいのかなと思います。 今のところは競プロは自分にとってアルゴリズムの勉強、コーディング練習、インターン・就活とかの為という位置づけです。
今後の目標は最低限入茶することですね。 ゆくゆくは水色あたりになりたいですね。
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))