【hihocoder】#1148 2月29日

4676 ワード

タイトルリンク:http://wwew.hihocoder.com/problemset/problem/1148
タイトル:2つの日付を指定し、この2つの日付の間に2月29日(開始日を含む)がどれだけあるかを計算します.
うるう年のみ2月29日、次の条件を満たす年はうるう年です.1.年は4で除けるが100で除けることはできません.2.年は400で除けることができます.
考え方:0~ある年から閏年の個数を計算し、year/400+year/4-year/100を直接使うのはどこが間違っているのか分からない.気持ち悪いOJ...この問題で私があげたアルゴリズムはWAです.の残してから直す.アルゴリズム:
data = {"January": 1, "February": 2, "March": 3, "April": 4, "May": 5, "June": 6, "July": 7, "August": 8,
        "September": 9, "October": 10, "November": 11, "December": 12}
def isLeap(i):
    if ((i % 400 == 0)or(i % 4 == 0 and i % 100 != 0)):
        return True
    else:
        return False

def parse(str):
    res = []
    res.append(int(str.split()[2]))  # year
    res.append(int(data[str.split()[0]]))  # month
    res.append(int(str.split()[1].replace(',',''))) # day
    return res

def cal(s):
    sd = parse(s)
    res=sd[0]/4+sd[0]/400-sd[0]/100
    if(isLeap(sd[0]) and(sd[1]<2) or (sd[1]==2 and sd[2]<29)):
        res-=1
    return res

try:
    t = int(raw_input())
    i=1
    while 1 <=t:
        start = raw_input()
        end = raw_input()
        s1 = cal(start)
        s2 = cal(end)
        res = s2-s1
        startd=parse(start)
        if(isLeap(startd[0])and(startd[1]==2)and(startd[2]==29)):
            res+=1
        print("Case #%d: %d"%(i,res))
        i+=1
except EOFError:
    print('error')