読者です 読者をやめる 読者になる 読者になる

君はまるで砂漠に咲く、一輪の花。

僕はその花に引き寄せられる蝶。

Codeforces Round #305 (Div.2)

はい。
http://codeforces.com/contest/548

A. Mike and Fax

ざっくりと大意

・文字列sの中に全てが同じ長さの回分の文字列がk個あるか??

方針のようなもの

・問題文の意味が分からないので解説読もう。

python

s=raw_input()
k=int(raw_input())

t=len(s)/k
if len(s)%k!=0:
    print 'NO'
else:
    for i in range(k):
        chk=s[t*i:t*i+t]
        chk=chk[::-1]
        if s[t*i:t*i+t]==chk:
            k-=1
    print 'YES' if k==0 else 'NO'

長さsの文字列で同じ長さの文字列がk個で、更にはsは全てが回分の文字列の結合したものであるらしい。なので余る文字はないらしい。その条件さえ分かれば文字列sをk個に分けて等分に分けられなければNO、等分に分けられればそれらk個の文字列が回文になっているかを調べた後にYES,NOを出力すれば大丈夫そう。

B. Mike and Fun

ざっくりと大意

・Mikeは審判で他の熊がn・mの各マスにいる。
・Mikeは審判で手を耳に当てている、他の熊は口か目に手を当てている。
・q回のゲームで(i,j)の熊が選ばれたら口からは目に、目からは口に変わる??
・行内で目に当ててる熊が連続している最大の数が各行ごとの得点になる??
・ゲームの得点は更にその中で最大のものが得点になる??

方針のようなもの

・初期状態の得点を数えて、ラウンドごとに熊の状態や得点をシミュレートして数える。

python

n,m,q=map(int,raw_input().split())
#l=map(int,raw_input().split())
l,score=[],[]

def jg(lst):
    x=y=0
    for p in lst:
        if p==0:
            y=0
        else:
            y+=1
            x=max(x,y)
    return x


for i in range(n):
    l.append(map(int,raw_input().split()))
    tmp=0
    score.append(jg(l[-1]))
for i in range(q):
    r,c=map(int,raw_input().split())
    if l[r-1][c-1]==1:
        l[r-1][c-1]=0
    else:
        l[r-1][c-1]=1
    score[r-1]=jg(l[r-1])
    print max(score)

リアルタイムで参加してた時はWAしていた。。目に当てている熊を連続並びでなくても全部数えていたのが原因っぽいが。。問題文をなんとか読んだ後は1回目でAC出た。もたいなかったな。。得点は初期状態で一度は全ての行を数えた後にラウンドで対象の行は得点を確認しなおして、別途でメモしている得点の配列から最大値を取れば大丈夫だった。