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

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

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

Codeforces Round #302 (Div.2)

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

A. Set of Strings

ざっくりと大意

・文字列qをk個に分割して同じ文字で始まるものがないようにする??

Python2

k=int(raw_input())
q=raw_input()
ans=[]
chk=''
t=set()
for i in q:
    if chk=='':
        chk=i
        t.add(i)
    elif len(t)<k and i not in t:
        ans.append(chk)
        chk=i
        t.add(i)
    else:
        chk+=i
ans.append(chk)
if len(ans)==k:
    print 'YES'
    for i in ans:
        print i
else:
    print 'NO'

先頭に使っている文字のチェック用にset型で保存できるように用意した。文字列qは先頭からチェックしてk個に分割できるまでは、他に区切りで先頭に使っていない文字が出てきたらそこで区切ることにした。長さを均等にする必要がないはずなのでk個出来るまでは違う文字が出てきたら即区切っていいと思う。

B. Sea and Islands

ざっくりと大意

・n行n列の領域内に海である'S'と、島である'L'(隣接しているものは1つの島と見做す)がある。
・n行n列の領域内にkの島が配置出来るならそれを出力、出来なければ'NO'を出力。

方針のようなもの

・nの上限が100なので作れるかを単純にシミュレートする。

python

n,k=map(int,raw_input().split())
ans=chk=0
ans=[]
cnt=0
for i in range(n):
    tmp=''
    for j in range(n):
        if (i+j)%2==0 and cnt<k:
            tmp+='L'
            cnt+=1
        else:
            tmp+='S'
    ans.append(tmp)
if cnt==k:
    print 'YES'
    for i in ans:
        print i
else:
    print 'NO'

交互にLとSを配置してLがk回配置出来たら残りは全てSにして、最後までシミュしてk回に満たなければNOということにした。先にLから交互に出せばn・n内で最大個数を配置することも出来るのでこれが楽で確実な方法だと思う。