牛客13584 日历中的数字
链接:https://ac.nowcoder.com/acm/problem/13584
来源:牛客网
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld
题目描述
ElemenT马上就要毕业了,他打开日历看了看时间。发现日历上的日期都是2017-04-04这样的格式的,月和日如果不足2位数,前面都会补充0。
给定一个年份和月份,ElemenT把那个月的日期都按上述格式写到纸上,他现在想知道某种数字出现了多少次。
输入描述:
多组输入
每组输入一行,有3个数字y,m,x(1000<=y<=3000,1<=m<=12,0<=x<=9),分别代表年份,月份,和他想知道哪个数字出现的次数。
输出描述:
每组输出一个整数,表示数字x在这个月的日期里出现了多少次。
注意闰年和月和日如果不足2位数,前面都会补充0即可。
def fn(y):
if (y%4 ==0 and y%100 !=0) or y%400 == 0:
return True
else:
return False
c1 = [1, 3, 5, 7, 8, 10, 12]
c2 = [4, 6, 9, 11]
c3 = [2]
while True:
try:
res = 0
y, m, x = list(map(int, input().split()))
if m in c1:
d = [12, 14, 13, 5, 3, 3, 3, 3, 3, 3]
n = 31
elif m in c2:
d = [12, 13, 13, 4, 3, 3, 3, 3, 3, 3]
n = 30
elif m in c3 and fn(y):
d = [11, 13, 13, 3, 3, 3, 3, 3, 3, 3]
n = 29
else:
d = [11, 13, 12, 3, 3, 3, 3, 3, 3, 2]
n = 28
if m <= 9:
d[0] += n
d[m] += n
elif m == 10:
d[1] += n
d[0] += n
elif m == 11:
d[1] += 2*n
else:
d[1] += n
d[2] += n
res += d[x]
if str(x) in str(y):
res += (str(y).count(str(x)))*n
print(res)
except:
break