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'で決め打ちして他はルール通りに処理する。