0.はじめに
いろいろと対策をして頂けたおかげか、久々にストレスなく回答できました。
Cまでしか解けませんでしたが、早めに回答できたためか
レートが30アップしました。
1.A - N-choice question
入力をすべて受け取った後、リストを頭から見ていって
A+Bと一致したら、その順番を出力して終了。
https://atcoder.jp/contests/abc300/submissions/41024841
2.B - Same Map in the RPG World
B問題にしては難しいというかめんどくさい問題でした。
【考え方】
B表の方は、縦横に付け加えて4面に。
B=[]
~略~
for _ in range(H): C=input()
B.append(C+C)
for i in range(H):
B.append(B[i])
その後B表を0,0~H,W(変数i,j)まで見るループを作り
その中に、A表の0,0~H,W(変数k,l)とB表の(i+k,j+l)を比較するループを
つくる。
内側のループを差がなく終了出来たら、Yesを出力して終了
最後まで下がaにループが無かったらNoを出力して終了
と、しました。
https://atcoder.jp/contests/abc300/submissions/41032004
3.C - Cross
なかなかユニークな問題でしたが、制約が親切だったので
考えやすかったです。
【考え方】
1.C表を端からチェックしていく 0,0~H,W(変数i,j)
1-1.C[i][j]=”#”の時
1-1-1.以下ループ(変数x初期値1、リストans[0]*min(H,W))
1-1-1-1.左上、右上、左下、右下(距離x)が、#であるかをチェック
1-1-1-1-1.すべて#であった場合、xに1を加算し次のループ
1-1-1-1-2.いずれか.であった場合、Xが1なら次のi,jへ
2以上なら、ams[x-1]に1を加算
2.最後にリストansを出力
https://atcoder.jp/contests/abc300/submissions/41037884
4.D - AABCC
最初は解法分からず諦めかけましたが、Pythonでの
素数の求め方等調べて、意外と大きい素数まで高速で求められることが
わかったので取り組みました。
残り3分くらいでやっと仕上がったのですが、7/17、WAがでてしまい撃沈。
翌日見直してたら、判定の部分で、=が抜けていることに気づき
おしかったな・・・と思いました。
考え方
A>B>Cなので、Cが最大になるのは、A=2、B=3の時で
Nが制約上最大の時でも、288675以下(10**18/12の平方根)
エラトステネスの篩を利用した方法であれば
これくらいの素数リストは高速に計算できるので
以下のように実装
実装
1.Nを12で割った数の平方根以下の素数をリストplistに格納
2.変数ansを0で初期化
3.変数aを1~len(plist)-1まで回す
3-1.変数bをa+1~len(plist)-1まで回す
3-1-1.変数cをb+1~len(plist)まで回す
3-1-1-1.(plist[a]**2)plist[b](plist[c]**2)<=Nの時
ansに1を加算
3-1-1-2.(plist[a]**2)plist[b](plist[c]**2)>Nの時
3-1-1のループを抜ける
4.ansを出力する
3-1-1-1の判断で、=が抜けていたため、コンテスト中にACを頂けませんでした。
https://atcoder.jp/contests/abc300/submissions/41062039
以上