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

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

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

Codeforces Round #263

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

A. Appleman and Easy Task

ざっくりと大意

・n*nのボードにoとxが並んでいる。
・各マスの四方の隣接マスのoの個数が偶数個ならYES。

方針のようなもの

・端は範囲外を見てエラーにならないように丁寧に数える。

n=int(raw_input())
l=[]
for i in range(n):
    l.append(raw_input())
for i in range(n):
    for j in range(n):
        chk=0
        if i+1<n:
            if l[i+1][j]=='o':
                chk+=1
        if i-1>-1:
            if l[i-1][j]=='o':
                chk+=1
        if j+1<n:
            if l[i][j+1]=='o':
                chk+=1
        if j-1>-1:
            if l[i][j-1]=='o':
                chk+=1
        if chk%2:
            print 'NO'
            exit()
print 'YES'

B. Appleman and Card Game

ざっくりと大意

・Applemanの持っているn枚のカードからToastmanはk枚のカードを選ぶ。
・選んだものと同じ文字数分のコインを得るのでそのコイン数を最大化する。
・e.g. 文字列:ABABA でAを2個選んだら、2点*2で4点のような感じ。。

方針のようなもの

・同じ文字数の多いものから使う。

n,k=map(int,raw_input().split())
w=raw_input()
l=[0]*26
for i in w:
    l[ord(i)-65]+=1
ans=0
chk=k
while 1:
    ma=max(l)
    if chk>=ma:
        chk-=ma
        ans+=(ma**2)
        l[l.index(ma)]=0
    elif chk<ma:
        ans+=chk**2
        chk=0
    if chk==0 or sum(l)==0:
        break
print ans

同じ文字数の数え方は多分countより先頭から舐めてordとか使うほうがいいと思う。countは遅いのであまり使わない習慣にしておいた方が後々は良いはず。。