Codeforces Round #380 (Div.2, Rated, Based on Technocup 2017 - Elimination Round 2)
はい。
http://codeforces.com/contest/738
A. Interview with Oleg
ざっくりと大意
・ogo,ogogo,...を***に置換して出力する。
Python2
n=int(raw_input()) s=raw_input() for i in range(50,0,-1): tmp='o'+'go'*i s=s.replace(tmp,'***') print s
sの最大の長さより余裕をみて長いogo...からreplaceをかけていってogoまで試し終わったら解になる。
B. Spotlights
ざっくりと大意
・ステージがn * mの長方形で1が俳優で0が照明。
・各照明の上下左右の方向に俳優がいれば方向ごとに+1して合計で幾つになるか。
Pypy2
n,m=map(int,raw_input().split()) l,r=[],[] ans=0 for i in range(n): a=map(str,raw_input().split()) tmp=''.join(a) l.append(tmp) chk=tmp.split('1') f=len(chk) if f==2: ans+=len(chk[0])+len(chk[1]) elif f>2: for j in range(f): if j==0 or j==f-1: ans+=len(chk[j]) elif j<f-1: ans+=len(chk[j])*2 for i in range(m): tmp='' for j in range(n): tmp=l[j][i]+tmp r.append(tmp) for i in r: chk=i.split('1') f=len(chk) if f==2: ans+=len(chk[0])+len(chk[1]) elif f>2: for j in range(f): if j==0 or j==f-1: ans+=len(chk[j]) elif j<f-1: ans+=len(chk[j])*2 print ans
Python2で出すとTLEでPypy2ならかなり余裕あり。。これ本番でだといやだな。入力を受け取ってリストに入れながら、その時の行を'1'でsplitして要素数が2つか、それ以上などで右にしか1がないゾーン、左右にある、左にしかないを分けて計算した。
そして元々のリストを90度回転させて同様の数え方をした。回転させたのは縦をまとめて数える方法がわからなかったため。