エイシング プログラミング コンテスト 2020
はい。
https://atcoder.jp/contests/aising2020
ooxx-- 809(-44) B問題まで。いまの実力で妥当な成績です。減り過ぎて茶色ライン見えてきました。
A - Number of Multiples
PyPy3
l,r,d=map(int,input().split()) print(r//d-(l-1)//d)
コンテスト後に書き直しました。コンテスト中はなぜかforでぶん回してました。L÷dとかで倍数が何個かわかるのでそんな必要なかったですよねっていうあれこれそれ。
B - An Odd Problem
PyPy3
input() print(len([j for i,j in enumerate(input().split()) if i%2==0 and int(j)%2]))
コンテスト中はもう少し普通に書いてます。終わった後でなんか変則な書き方をしたかったので。。
C - XYZ Triplets
PyPy3
n=int(input()) d={} for i in range(1,100): for j in range(i,100): if i**2>n or j**2>n: break for k in range(j,100): tmp=i**2+j**2+k**2+i*j+j*k+k*i if tmp>n: break if i==k: x=1 elif i==j or j==k: x=3 else: x=6 if tmp in d: d[tmp]+=x else: d[tmp]=x for i in range(1,n+1): if i in d: print(d[i]) else: print(0)
ちょっと強引なような。あと100までの3重ループならbreak噛ませる必要なさそうな気がします。
D - Anything Goes to Zero
PyPy3
n=int(input()) x=input() chk0=chk1=chk2=0 b=x.count("1") if b==1 and x=="1": print(0) exit() elif b==1: for i in range(n): if i==n-1: print(2) elif x[i]=="0": print(1) else: print(0) exit() for i,j in enumerate(x[::-1]): if j=="1": chk1+=pow(2,i,b+1) if b>1: chk2+=pow(2,i,b-1) else: chk2=0 l=[] for i,j in enumerate(x[::-1]): if b: a1=pow(2,i,b+1) else: a1=1 if b>1: a2=pow(2,i,b-1) else: a2=1 if j=="0": t=chk1+a1 else: if b>1: t=chk2+b-1-a2 else: t=0 ans,f=0,1 while t: if f: if j=="0": t%=(b+1) else: t%=(b-1) f=0 else: t%=bin(t).count("1") ans+=1 l.append(ans) for i in l[::-1]: print(i)
かなり強引に。一部の計算が合わないパターンは提出繰り返して色々試してテストケースの中身を推測してAC。ダメです。まじめな解き方とかはあとで考えます。