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周期としてうにょうにょしようとしたが実装できず。