AtCoder Regular Contest 040
はい。
https://atcoder.jp/contests/arc040
A - 床塗り
PyPy3
n=int(input()) w=[0,0] for i in range(n): s=input() w[0]+=s.count("R") w[1]+=s.count("B") print("TAKAHASHI" if w[0]>w[1] else "AOKI" if w[1]>w[0] else "DRAW")
1行ずつ受け取りながらRB数えてが楽だと思います。数えたら大小を確認して解の出力を。
B - 直線塗り
PyPy3
n,r=map(int,input().split()) s=list(input()) ans=chk=0 t=set() for i in range(n): if s[i]==".": c=0 for j in range(i,min(i+r,n),1): if s[j]==".": c+=1 if c==1: t.add(max(0,i-r+1)) for i in range(n): if s[i]=="." or i in t: ans+=chk+1 for j in range(i,i+r): s[j]="o" chk=0 chk+=1 print(ans)
サンプル2がヒントです。5番目より右には塗るマスがないので2番目のマスに到達した時点で塗るようにしてしまいます。
塗り作業前により右に "." がない場合には "." の-r+1の地点を塗り始め箇所としてメモしておきます。そうしたら先頭から塗り作業を開始して現在地が "." かメモしておいた地点なら塗り作業をします。ずっと右に移動していきます。
移動は端のr-1までで良さそうな気がしますが思考停止しているので端まで移動をシミュしてます。