エイシング プログラミング コンテスト 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。ダメです。まじめな解き方とかはあとで考えます。