kmjp's blog

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

AtCoder ABC #001 : Python練習編

ABC001は参加せず後日練習。
Dだけちょっとめんどくさいね。
せっかくなのでPythonで。
http://abc001.contest.atcoder.jp/assignments

A - 積雪深差

2つの数値が与えられるので、差を出力せよ。
やるだけ。

a=input()
b=input()
print "%d" % (a-b)

B - 視程の通報

ルールに則って風速をパラメータに変換せよ。
メートルのまま計算するだけ。

import sys

m=input()
d=0

if m<100:
	d=0
elif m<=5000:
	d=m/100
elif m<=30000:
	d=m/1000+50
elif m<=70000:
	d=(m/1000-30)/5+80
elif m>70000:
	d=89

print "%02d" % d

C - 風力観測

角度と速度が与えられるので、それを方位と風速パラメータに変換せよ。
素直にルールに従うだけ。
分岐をたくさん書くと面倒なので、テーブル処理した。
何気に小数の誤差対策でかなり手間取った…。

import sys

D,S=map(int,raw_input().strip().split(" "))
w=0

tab=["N","NNE","NE","ENE","E","ESE","SE","SSE","S","SSW","SW","WSW","W","WNW","NW","NNW","N"]
wd=[0.0,0.3,1.6,3.4,5.5,8.0,10.8,13.9,17.2,20.8,24.5,28.5,32.7]
S=int((S/60.0+0.05)*10+0.0001)/10.0
w=0
for r in range(0,len(wd)):
	if S>=wd[r]:
		w=r

if w==0:
	print "C 0"
else:
	print "%s %d" % (tab[int((D/10.0+11.25)/22.50)],w)

D - 感雨時刻の整理

雨が降っていた時間レンジがいくつか与えられる。
それぞれを統合して、5分間隔で雨が降っていた期間を示せ。

時間を5分区切りにして、5分毎に雨の有無を配列に入れ、配列をたどりながら時間を表示する。

import sys

N=input()
bm=[0 for j in range(24*12+1)]
for i in range(N):
	x,y=map(int,raw_input().strip().split("-"))
	x=x/100*60+x%100
	y=y/100*60+y%100
	if x%5 > 0:
		x-=x%5
	if y%5 > 0:
		y+=5-y%5
	for z in range(x,y,5):
		bm[z/5]=1

i=0
while i<=24*12:
	if bm[i]==0:
		i+=1
		continue
	
	s=i
	while i<=24*15 and bm[i]==1:
		i+=1
	print "%02d%02d-%02d%02d" % (s/12,s%12*5,i/12,i%12*5)

まとめ

まだCよりPythonの方が書くのに時間かかるな…。