DISCO presents ディスカバリーチャンネル コードコンテスト2020 予選

はい。 https://atcoder.jp/contests/ddcc2020-qual
ooo--- だったようです。必ずWAして再提出でAC。慎重にがんばりましょう。Cが400点問題でEが500点なので3問のみでも痛くはなかったはずです。

A - DDCC Finals

PyPy3

x,y=map(int,input().split())
ans=0
w=[0,300000,200000,100000]
if x<4:
    ans+=w[x]
if y<4:
    ans+=w[y]
if x==y==1:
    ans+=400000
print(ans)

慎重に場合分けを書けば解決するはずです。

B - Iron Bar Cutting

PyPy3

n=int(input())
a=[int(i) for i in input().split()]
chk=sum(a)
k=chk//2
k1=k+1
k2=k+2
k3=k-1
k4=k-2
x=y=z=0
for i,j in enumerate(a):
    z=i
    x+=j
    if x>=k:
        break
if x==k and chk%2==0:
    print(0)
else:
    ans=min(abs(x-k)+abs((chk-x)-k),abs(x-k1)+abs((chk-x)-k1),abs(x-k2)+abs((chk-x)-k2),abs(x-k3)+abs((chk-x)-k3),abs(x-k4)+abs((chk-x)-k4))
    x=y=z=0
    for i,j in enumerate(a):
        z=i
        if x+j>=k:
            break
        x+=j
    ans2=min(abs(x-k)+abs((chk-x)-k),abs(x-k1)+abs((chk-x)-k1),abs(x-k2)+abs((chk-x)-k2),abs(x-k3)+abs((chk-x)-k3),abs(x-k4)+abs((chk-x)-k4))
    print(min(ans,ans2))

よく覚えてません。そのうち考え直します。

C - Strawberry Cakes

PyPy3

h,w,k=map(int,input().split())
d=[]
t=[[0]*w for i in range(h)]
for i in range(h):
    d.append(list(input()))
c=0
for i in range(h):
    f=0
    for j in range(w):
        if f==1 and d[i][j]==".":
            t[i][j]+=c
        elif d[i][j]=="#":
            c+=1
            t[i][j]+=c
            f=1
 
for i in range(h):
    f=0
    for j in range(w-1,-1,-1):
        if t[i][j]!=0:
            f=1
            c=t[i][j]
        elif f and t[i][j]==0:
            t[i][j]+=c
for i in range(w):
    f=0
    for j in range(h):
        if t[j][i]!=0:
            f=1
            c=t[j][i]
        elif f and t[j][i]==0:
            t[j][i]+=c
 
for i in range(w):
    f=0
    for j in range(h-1,-1,-1):
        if t[j][i]!=0:
            f=1
            c=t[j][i]
        elif f and t[j][i]==0:
            t[j][i]+=c
 
for i in t:
    print(*i)

左上から見始めてイチゴがあったら次のイチゴか端にぶつかるまで延ばします。右上から見て左に延ばします(各行の最も左にあるイチゴが端にぶつかるまでだけのはずです)。 左上から見始めて下に延ばします。左下から延ばします。
全ての伸ばした領域が長方形になっています。証明はありません。

D - Digit Sum Replace

PyPy3

m=int(input())
t=[0,0]
for i in range(m):
    d,c=map(int,input().split())
    t[0]+=c
    t[1]+=d*c
print(t[0]-1+(t[1]-1)//9)

問題文の2378、サンプル1の229を処理の全パターン試します。連続する2桁の選び方を変えても同じ回数になることに気づくはずです。1回戦ごとに桁が1つ減るか、各桁の総和が9減るかのどちらかで進行するはずです。最後は1桁になると終了なので桁の長さ引く1と、(総和引く1)割る9の和が解になるはずです。