はい。
AtCoder Beginner Contest 188
oooo-- 821(+21) 辛うじて色変わらず。
A - Three-Point Shot
a,b=map(int,input().split())
print("Yes" if abs(a-b)<3 else "No")
差分を絶対値で確認しました。
B - Orthogonality
a=[int(i) for i in input().split()]
b=[int(i) for i in input().split()]
ans=0
for i in range(n):
ans+=a[i]*b[i]
print("Yes" if ans==0 else "No")
先頭から計算。
C - ABC Tournament
n=int(input())
l=[int(i) for i in input().split()]
a=[0,0]
b=[0,0]
t=pow(2,n)
w=t//2
for i in range(t):
if i>=w:
if b[0]<l[i]:
b[0]=l[i]
b[1]=i
else:
if a[0]<l[i]:
a[0]=l[i]
a[1]=i
print(a[1]+1 if a[0]<b[0] else b[1]+1)
ちょっと悩みました。決勝までこれるのは左右のそれぞれの最大です。最後に負けるほうが解に。
D - Snuke Prime
n,x=map(int,input().split())
d={}
ed=0
vv=[]
for i in range(n):
a,b,c=map(int,input().split())
if a in d:
d[a]+=c
else:
d[a]=c
vv.append(a)
if b+1 in d:
d[b+1]-=c
else:
d[b+1]=-c
vv.append(b+1)
ans=chk=0
vv.sort()
p=len(vv)
for i in range(p-1):
di=vv[i+1]-vv[i]
chk+=d[vv[i]]
if chk<x:
ans+=chk*di
else:
ans+=x*di
print(ans)
前日を配列に入れるようなことは配列サイズの都合で出来ない。始まりと終りの日だけに絞ってimos法で累積和の情報を管理します。固定費のCと金額を比較してよしなに。
E - Peddler
md=200007
ans=-2*1000000009
n,m=map(int,input().split())
a=[int(i) for i in input().split()]
w=[1000000007] * md
h=[0] * md
d,t=set([]),{}
for i in range(m):
x,y=[int(i)-1 for i in input().split()]
if x in t: t[x].add(y)
else: t[x]=set([y])
h[x]=1
d.add(x)
w[x]=a[x]
while len(d):
p=d.pop()
for i in t[p]:
ans=max(ans,a[i]-w[p])
if (i in t) and (h[i]==0 or w[p]<w[i]):
d.add(i)
h[i]=1
w[i]=min(w[i],w[p])
print(ans)
移動先は頂点番号が必ず大きいようになっていう有向グラフです? 雑に幅優先探索っぽい探索します。移動回数はコストに関わらないので雑で大丈夫です。