Codeforces Round #392 (Div.2) 参加記

はい。 oo---- (0/0) 1349(+43)
http://codeforces.com/contest/758
A,Bのみ2完。Cは問題文は読めて方針を思い浮かべるも実装に至らず。HackよりもCに力を入れていたので今回もHack試行はなし。

A. Holiday Of Equality

ざっくりと大意

・n人の市民のそれぞれの\(a_i\)に対して、最大のaの数に合わせて福祉を行う?
・国庫の負担の総額がいくらになるか??

Python3

n=int(input())
l=[int(i) for i in input().split()]
tmp=max(l)
ans=chk=0
for i in l:
    ans+=(tmp-i)
print(ans)

数列aのmaxとの差分をforループで加算し続けたものが解になると思う。

B. Blown Garland

ざっくりと大意

・R,B,Y,Gの照明と、!が球切れの状態になっていて入力文字列sで規則正しく並んでいる。
・R,B,Y,Gそれぞれの球切れの個数を数える。

Python3

ans=[0]*4
ls=[0]*4
chk={'R':-1,'G':-1,'B':-1,'Y':-1}
h={i:'' for i in range(4)}

n=input()
for a,i in enumerate(n):
    if i=='R':
        chk[i]=a%4
        ls[a%4]=1
        h[a%4]=i
    elif i=='G':
        chk[i]=a%4
        ls[a%4]=1
        h[a%4]=i
    elif i=='B':
        chk[i]=a%4
        ls[a%4]=1
        h[a%4]=i
    elif i=='Y':
        chk[i]=a%4
        ls[a%4]=1
        h[a%4]=i
for i in chk:
    if chk[i]==-1:
        for j in range(4):
            if ls[j]==0:
                chk[i]=j
                h[j]=i
                break
for a,i in enumerate(n):
    if i!=h[a%4]:
        if h[a%4]=='R':
            ans[0]+=1
        elif h[a%4]=='B':
            ans[1]+=1
        elif h[a%4]=='Y':
            ans[2]+=1
        elif h[a%4]=='G':
            ans[3]+=1

print(*ans)

各色は出現した番目の%4で出現周期を確定させる。それが確定できたらまた先頭からみて周期に合わせて!を数える。RB!Gみたいなパターンを警戒したけども各色が必ず1度出現することが保証されていたらしい。

C. Unfair Poll

ざっくりと大意

・教室で机がn行並んでいて、それぞれの行にはm人がいる。その中でSergeiはx行のy番目の席にいる。
・生徒が指される順番は1,1から1,mまでいき次に2,1から2,m...とつづく、n,1からn,mを指したあとはn-1,1からn-1,mを指し、次はn-2,1からn-2,m....となる。
・指される回数が最大のもの、最小のもの、Sergeiの回数を出力する。

机が1行の場合はひたすら1番目からm番目までループするだけ、2行の場合は1行目の末尾に付け足して1行のm * 2人とする。3行以上の場合は2行目のm番目の人の番になるまで(2からn-1行目の人は2回指される)、を1周期としてうにょうにょしようとしたが実装できず。