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

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

Coder-Strike 2014 - Round 1

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

A. Poster

ざっくりと大意

・全部でnの長さの文字列をkの位置から開始して、左右どちらかに移動と1文字単位で出力して、最小手順で同じ文字列を作成する。

方針のようなもの

・どっちか近い方の端に寄ってから出力と反対側の端に行くのかな。

n,k=[int(x) for x in raw_input().split()]
w=raw_input()
l=['LEFT','RIGHT','PRINT']
chk=0
if k!=1 or k!=n:
    if n-k>=k:
        for i in range(k-1):
            print l[0]
    else:
        chk=1
        for i in range(n-k):
            print l[1]
if chk:
    for i in range(-1,-n-1,-1):
        print ' '.join([l[2],w[i]])
        if i!=-n:
            print l[0]
else:
    for i in range(n):
        print ' '.join([l[2],w[i]])
        if i!=n-1:
            print l[1]

B. Network Configuration

ざっくりと大意

・n個のコンピューターの最大転送速度は\(a_i\)である。
・k人の参加者により速い速度でかつ全員に平等にな早さ(速度は一部転送カットで遅く調整できる??)のコンピューターを使わせたい。
・k台のコンピューターを使わせるのに転送速度はいくつになるか??

方針のようなもの

・ソートして速い方から見ればいい気がする。

n,k=map(int,raw_input().split())
l=[int(x) for x in raw_input().split()]
l.sort()
print l[-k]

C. Pattern

ざっくりと大意

・n個の同じ長さの?と英小文字で構成の文字列が与えられる。
・それぞれの文字列の同じ番目が全て?なら任意の英小文字、共通の英小文字1種類と0個以上の?だったらその英小文字、英小文字が2種類以上あったら?にして新しく文字列を作る。

方針のようなもの

・丁寧に比較する。

n=int(raw_input())
l=[]
x=n
ans=''
while x:
    x-=1
    l.append(raw_input())
chk=cnt=len(l[0])
for i in range(cnt):
    m=''
    for j in range(n):
        if l[j][i]!='?':
            if m=='':
                m=l[j][i]
            elif l[j][i]!=m:
                m+=l[j][i]
    if len(m)==1:
        ans+=m
    elif m=='':
        ans+='a'
    else:
        ans+='?'
print ans

それぞれの1文字目から丁寧に比較して全て?だった場合は'a'で決め打ちして他はルール通りに処理する。