kmjp's blog

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

AtCoder ARC #007 : Python練習編

ぼちぼち中継地点。
http://arc007.contest.atcoder.jp/assignments

A - 帰ってきた器物損壊!高橋君

1文字と別の文字列が与えられるので、後者の文字列から最初の1文字を抜いて返す。
最初は真面目に1文字ずつ処理してみた。

A=raw_input()
B=raw_input()
 
C=''
for c in B:
	if c != A:
		C+=c
 
print(C)

でも、もっと簡単にも書けるのね。

A=raw_input().strip()
print(raw_input().replace(A,""))

B - 迷子のCDケース

CDドライブとCDケース群でCDの入れ替えを行うとき、最終的なCDの並びを答える。
題意に沿ってswapを繰り返すだけ。

N,M=map(int,raw_input().split(" "))
C=range(0,N+1)

for i in range(0,M):
	d=input()
	for j in range(0,N+1):
		if C[j]==d:
			C[0],C[j]=C[j],C[0]
			break

for i in range(1,N+1):
	print(C[i])

C - 節約生活

あるテレビについて、1周期中見られる時間と見られない時間がbitmapで与えられる。
何台かテレビを準備して、1周期分常に1台以上は見られるようにするとき、最小台数を答える。
1周期10時間なので、2^10パターン全列挙して試せばよい。

S=list(raw_input())
L=len(S)
v=0
for i in range(L):
	if S[i]=="o":
		v |= 1<<i

mi=1000
for par in range(1<<L):
	b=0
	t=0
	for i in range(L):
		if (par & (1<<i))>0:
			t += 1
			b |= (v<<i) | (v>>(L-i))
			
	if b & ((1<<L)-1) == ((1<<L)-1):
		mi=min(mi,t)

print(mi)

まとめ

この回は余り苦労せず順調にこなせた。