はい。
AtCoder Beginner Contest 181
oooo-- 859(-4) ちょっと下げ。ここらへんが適正レーティングでしょうか。
A - Heavy Rotation
n=int(input())
print("Black" if n%2 else "White")
偶数奇数で。
B - Trapezoid Sum
def sig(a): return a*(a+1)//2
n=int(input())
ans=0
for i in range(n):
a,b=map(int,input().split())
ans+=sig(b)-sig(a-1)
print(ans)
総和を求める短い式 a*(a+1)//2
ですら記憶できないので自作テンプレートに追加することにしました。
C - Collinearity
def tri(xa,ya,xb,yb,xc,yc): return abs((xa-xc)*(yb-yc)-(xb-xc)*(ya-yc))
n=int(input())
w=[]
for i in range(n):
x,y=map(int,input().split())
w.append((x,y))
ans=1
for i in range(n-2):
for j in range(i+1,n-1):
for k in range(j+1,n):
ans=min(ans,tri(w[i][0],w[i][1],w[j][0],w[j][1],w[k][0],w[k][1]))
print("No" if ans else "Yes")
3点の傾きが、直線かどうかを調べようと思いました。よくわからないので3点で三角形の面積が0なら直線のはずということで面積を判定基準にしました。
D - Hachi
p=set([])
for i in range(111,1000):
if i%2==0 and ((i//2)%100)%4==0 and "0" not in str(i):
d=[str(i//100) ,str((i%100)//10) ,str(i%10)]
d.sort()
r="".join(d)
p.add(r)
s=input()
if len(s)<10 and int(s)%8==0:
print("Yes")
exit()
if len(s)==2 and (int(s[1])*10+int(s[0]))%8==0:
print("Yes")
exit()
w={}
for i in s:
if i in w:
w[i]+=1
else:
w[i]=1
for i in p:
if i[0] in w and i[1] in w and i[2] in w:
w[i[0]]-=1
w[i[1]]-=1
w[i[2]]-=1
if w[i[0]]>-1 and w[i[1]]>-1 and w[i[2]]>-1:
print("Yes")
exit()
w[i[0]]+=1
w[i[1]]+=1
w[i[2]]+=1
print("No")
8の倍数の判定条件をググりました。末尾3桁のみで判定できるとのことでした。列挙して0を含まない3桁をメモしました。入力で与えられる数字列の1-9の出現回数を数えました。メモした3桁が作れるかを調べました。
E - Transformable Teacher
import bisect
f=10000000001
n,m=map(int,input().split())
h=[int(i) for i in input().split()]
w=[int(i) for i in input().split()]
h.sort()
at,bt=[0],[0]
for i in range(0,n-1,2):
at.append(at[-1]+h[i+1]-h[i])
for i in range(1,n-1,2):
bt.append(bt[-1]+h[i+1]-h[i])
ans=sum(at)*2+f
for i in w:
x=bisect.bisect_right(h,i)
if x==0:
ans=min(ans,bt[-1]+h[0]-i)
elif x==n:
ans=min(ans,at[-1]+i-h[-1])
elif x%2:
ans=min(ans,i-h[x-1]+at[x//2]+bt[-1]-bt[x//2])
else:
ans=min(ans,h[x]-i+at[x//2]+bt[-1]-bt[x//2])
print(ans)
ペアを作成するのには身長差がなるべく小さいほうがいいので児童はソートしておきます。ペアの身長差の累積和を先頭・末尾を使わない2種類用意します。変身は全部試します。ソートされている児童の誰とペアになるかは二分探索で探します。児童の左右どちらとペア化は入る位置によって決まります。入り込んで新しくペア作って、左側までが先頭からの累積和と右側は末尾からの累積和を使えば時間内に計算できるはずです。多分。