AtCoder Beginner Contest #009 復習
はい。
http://abc009.contest.atcoder.jp
A - 引越し作業
引っ越しでダンボールを運び切る回数
print(input()+1)/2
繰り上げ??て2で割る。
B - 心配性な富豪、ファミリーレストランに行く。
2番目に高いものを探す。同じ金額のものは同じ順位で扱う。
n=int(raw_input()) a=set() while n: n-=1 a.add(input()) a=list(a) a.sort() print a[-2]
set型で重複を排除して2番目のものを出力する。
C - 辞書式順序ふたたび
元の文字列から位置の変わったものをk個以内にして辞書順で最も早いものをつくる。
# refer from http://abc009.contest.atcoder.jp/submissions/174504 n,k=map(int,raw_input().split()) s=raw_input().rstrip() f=[0]*26 origin=[0]*26 for i in s: #ord('a')が97から始まる値であることを意識せず、97を忘れても-ord('a') #することでリストの先頭0番目からカウントできる f[ord(i)-ord('a')]+=1 origin[ord(i)-ord('a')]+=1 t='' for i in xrange(n): origin[ord(s[i])-ord('a')]-=1 for j in xrange(26): if f[j]>0: f[j]-=1 if ord(s[i])!=ord('a')+j: k-=1 dif=0 for q in xrange(26): dif+=abs(origin[q]-f[q]) if dif/2<=k: t+=chr(j+ord('a')) break else: if ord(s[i])!=ord('a')+j: k+=1 f[j]+=1 print t
今回も写経。今回のuwiさんのものを。-ord('a')というのは便利そう。 今回の解法の流れはまた後で追いかける。。