AtCoder Regular Contest #002

まだ終わってない時間から書き出すなど.Dメンドそうなんだもん.

結果3完300点の147位,CでくらいまくったWAペナが痛い.

A

とくになし.書くだけ.

http://arc002.contest.atcoder.jp/submissions/6983

main=readLn>>=putStrLn.isLeap
isLeap n | 0 == mod n 400 = "YES"
         | 0 == mod n 100 = "NO"
         | 0 == mod n 4 = "YES"
         | otherwise = "NO"

B

Aのコード持ってきて入力年月日開始日のカレンダー生成してfilterしてhead.

http://arc002.contest.atcoder.jp/submissions/7434

import Text.Printf
main=getLine>>=p.head.filter f.cal.map read.words.map rep
rep '/'=' '
rep c = c
cal [y,12,d] = [(y,12,d')|d'<-[d..days y!!11]] ++ cal [y+1,1,1]                                                            
cal [y,m,d] = [(y,m,d')|d'<-[d..days y!!(m-1)]] ++ cal [y,m+1,1]
p (y,m,d) = printf "%04d/%02d/%02d\n" y m d
f (y,m,d) = 0 == mod y (m*d)
isLeap n | 0 == mod n 400 = True
         | 0 == mod n 100 = False
         | 0 == mod n 4 = True
         | otherwise = False
days y = [31, if isLeap y then 29 else 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

C

ムダにハマった.

L/RのショートカットキーにL/Rも含められるもんだと問題を解釈してしまったのが痛い.いやだってあれそう読めるよね?たとえば含められる条件下だと"AABAAB"は"L=>AA","R=>LB"にショートカットできるなら"RR"の入力でOKだけど,できないなら"LBLB"の入力が必要になる.

WAくらって,何がおかしいのかわからぬままもしやで質問ページ開いたらL/RはL/Rを含まないと書かれていたという.

http://arc002.contest.atcoder.jp/submissions/8590

import Data.List
main=getLine>>getLine>>=print.f
f x = minimum[length$foldr(#)x lr|lr<-mapM(\_->mapM(\_->"ABXY")[1,2])[1,2]]
s#(a:b:x) | s == [a,b] = '_':s#x
s#(a:x) = a:s#x
s#[] = []

D

読んだけどわからない.たぶん会敵しきるまでの手数と,会敵しきった後に後衛で消費できる手数で決められるんだと思うが.