kmjp's blog

競技プログラミング参加記です

AtCoder ARC #006 : Python練習編

どんどん行きます。
http://arc006.contest.atcoder.jp/assignments

A - 宝くじ

宝くじのあたり番号と自分の番号で決まる当選順位を答える。
地道に分岐したけど、もっと賢い方法もあるのかな。

E=list(raw_input().split(" "))
B=raw_input()
L=list(raw_input().split(" "))

mat=0
bo=0
for i in range(0,6):
	if L[i] in E:
		mat += 1
	if L[i] == B:
		bo += 1

if mat==6:
	print 1
elif mat==5 and bo>0:
	print 2
elif mat==5:
	print 3
elif mat==4:
	print 4
elif mat==3:
	print 5
else:
	print 0

B - あみだくじ

あみだくじとその当たりの位置が与えられるので、当たりを引ける開始位置を答える。
あみだくじの横線があるところで位置を入れ替えていけばよい。

N,L=map(int,raw_input().split(" "))
T=range(0,N)

for a in range(0,L):
	S=raw_input()
	for i in range(0,N-1):
		if S[i*2+1]=='-':
			T[i],T[i+1]=T[i+1],T[i]

S=raw_input()
for i in range(0,N):
	if i*2 < len(S) and S[i*2]=='o':
		print(T[i]+1)

C - 積み重ね

一連の段ボールに対し、各段ボールは床または自分以上の重さの段ボールに重ねられる場合、最小の段ボールの山の数を答える。
各段ボールに対し、その段ボールを置ける最軽量の既存の段ボールに重ねていけばよい。

N=input()
Q=[]

for i in range(N):
	w=input()
	ok=0
	for j in range(len(Q)):
		if w<=Q[j]:
			ok=1
			Q[j]=w
			break
	if ok==0:
		Q.append(w)
	Q.sort()

print(len(Q))

まとめ

リスト要素のswapが簡単にできていいね。