どんどん行きましょう。
http://arc002.contest.atcoder.jp/assignments
A - うるう年
年に対して閏年判定を行う問題。
題意通りに処理すればよい。1行でも書けそうだけど、練習なのでじっくり書いた。
Y=input() R="NO" if Y % 4 == 0: R="YES" if Y % 100 == 0: R="NO" if Y % 400 == 0: R="YES" print(R)
B - 割り切れる日付
指定された日付以降で、年を月と日で割ると割り切れる日を探す問題。
先ほど作った閏年判定コードを使って、1日ずつインクリメントして探せばよい。
何気に初めての正規表現。
def inc(D): mm = [0,31,28,31,30,31,30,31,31,30,31,30,31] if D[0] % 4 == 0: mm[2] += 1 if D[0] % 100 == 0: mm[2] -= 1 if D[0] % 400 == 0: mm[2] += 1 D[2] += 1 if D[2] > mm[D[1]]: D[2] = 1 D[1] += 1 if D[1] > 12: D[0] += 1 D[1] = 1 return D A=raw_input() r=re.compile("(\d+)/(\d+)/(\d+)") m=r.search(A) da=[int(m.group(1)),int(m.group(2)),int(m.group(3))] while da[0] % (da[1]*da[2]) > 0: da = inc(da) print "%04d/%02d/%02d" % (da[0],da[1],da[2])
C - コマンド入力
ABXYの4文字で与えられるコマンドで、L・Rに連続する2文字のマクロ機能を割り当ててコマンド数を最小にする。
LとRの候補はそれぞれ16通りしかないので、全パターン試せばよい。
def cnt(C,L,R): c=0 i=0 while i < len(C): c += 1 if i==len(C)-1: break if C[i:i+2]==L or C[i:i+2]==R: i += 2 else: i += 1 return c N=input() C=raw_input() mc=N for L1 in ["A","B","X","Y"]: for L2 in ["A","B","X","Y"]: for R1 in ["A","B","X","Y"]: for R2 in ["A","B","X","Y"]: L=L1+L2 R=R1+R2 mc=min(mc,cnt(C,L,R)) print(mc)
まとめ
リストに対するfor文とかはC++より書きやすいね。