AtCoder Beginner Contest 152
はい。
https://atcoder.jp/contests/abc152
ooox-- 905(-30) C問題までは痛いです。
A - AC or WA
PyPy3
n,m=map(int,input().split()) print("Yes" if n==m else "No")
N==Mであること、全てのテストケースに正解しているかでYesNo。
B - Comparing Strings
PyPy3
a,b=map(int,input().split()) ans=[str(a)*b,str(b)*a] ans.sort() print(ans[0])
実際に作成してソートしました。
C - Low Elements
PyPy3
n=int(input()) p=[int(i) for i in input().split()] ans=1 chk=p[0] for i in range(1,n): if p[i]<=chk: chk=p[i] ans+=1 print(ans)
最初は問題文誤読で無駄にWA。末尾から見て最長増加部分列かなとか思ったけど違いました。
先頭から見始めて同値か小さい値があれば件数カウント+1と、チェック用の値は同値でも気にせず上書き更新を末尾まで、という感じだと思います。
D - Handstand 2
PyPy3
n=int(input()) d=[[0]*10 for i in range(10)] ans=0 for i in range(1,n+1): a=i%10 if a!=0: t=i while t>9: t//=10 b=t d[b][a]+=1 for i in range(10): for j in range(10): ans+=d[i][j]*d[j][i] print(ans)
時間中は方針が悪くて1桁、2桁…の場合分けして数えようとかしてAC出来ませんでした。そんな必要ありませんでした。
1からNまでループ回します。それぞれの数で先頭と末尾の数がいくつであるかを調べます。末尾0は無視してもしなくてもいいと思います。後で数える時に含めなければ大丈夫なので。
配列[先頭桁][末尾桁]にそれぞれの出現ごとに1加算します。これで1からNまでの数の[先頭1][末尾2]などの出現数が調べ終わっています。なので10の二重ループで先頭と末尾を入替のペア同士で掛け算したものの合計が解になります。多分。