AtCoder Beginner Contest 133

はい。
https://atcoder.jp/contests/abc133

A - T or T

PyPy3

n,a,b=map(int,input().split())
print(min(n*a,b))

問題文通りに電車を1人あたりa円をn人で使う金額と、タクシーのb円を比較する。

B - Good Distance

PyPy3

n,d=map(int,input().split())
w=[]
for i in range(n):
    l=[int(i) for i in input().split()]
    w.append(l)
ans=0
chk=set([int(i)**2 for i in range(0,401,1)])
for i in range(n-1):
    for j in range(i+1,n):
        cnt=0
        for k in range(d):
            cnt+=(w[i][k]-w[j][k])**2
        if cnt in chk:
            ans+=1
print(ans)

平方根n**0.5 するのがいまいち信用していいか分からなかったので0から400(-20,20で座標差の最大が40と最大10次元)までの自乗の配列をつくっておいてソレと比較するようにしました。

C - Remainder Minimization 2019

PyPy3

l,r=map(int,input().split())
ans=2020
for i in range(l,min(r,l+2019)):
    for j in range(i+1,min(r,i+2019)+1):
        ans=min(ans,(i*j)%2019)
print(ans)

解は必ず0から2018までの数になります。l,rもその分だけ見ればいいようです。なぜそれでいいのかの証明はここにはありません。

D - Rain Flows into Dams

PyPy3

n=int(input())
a=[int(i) for i in input().split()]
ans=[0]*n
for i in range(n):
    if i%2: ans[0]-=a[i]
    else: ans[0]+=a[i]
 
for i in range(1,n):
    ans[i]=(a[i-1]-ans[i-1]//2)*2
print(*ans)

参考先様
https://qiita.com/ta-ka/items/d6a41435fdab5efe9e5b
ダムがa=[2,2,4]とすると、雨量はb=[4,0,4]。 a[0]=b[0]//2+b[1]//2 となっている。 ということは 2*a[0]=b[0]+b[1] である。あと更に 2*a[1]=b[1]+b[2], 2*a[2]=b[2]+b[0] これを代入して式を整理すると b[0]=a[0]-a[1]+a[2] となります。雨量を一箇所特定出来たので後は残りの箇所も計算で求められます。