链接:
https://www.nowcoder.com/acm/contest/115/B
来源:牛客网
来源:牛客网
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
给出一个出生日期,比如:1999-09-09,
问:从出生那一天开始起,到今天2018-04-21为止(包括出生日期和今天),有多少天,年月日都不包含数字4?
问:从出生那一天开始起,到今天2018-04-21为止(包括出生日期和今天),有多少天,年月日都不包含数字4?
输入描述:
第一行输入一个整数T(表示样例个数) 接下来T组样例 每个样例一行,包含一个字符串“yyyy-mm-dd”(1990<=yyyy<=2018) 题目保证测试数据的正确性
输出描述:
输出题意要求的天数
示例1
输入
1 1999-09-09
输出
5020
#include<iostream> #include<cstdio> using namespace std; int a[2020][20][40]; void solve(){ int cnt=0; for(int i=1990;i<=2018;i++){ for(int j=1;j<=12;j++){ if(j==2){ if(((i%4==0)&&(i%100!=0))||(i%400==0)){ for(int k=1;k<=29;k++){ if((i%10!=4)&&(j%10!=4)&&(k%10!=4)) cnt++; a[i][j][k]=cnt; } } else{ for(int k=1;k<=28;k++){ if((i%10!=4)&&(j%10!=4)&&(k%10!=4)) cnt++; a[i][j][k]=cnt; } } } else if(j==1||j==3||j==5||j==7||j==8||j==10||j==12){ for(int k=1;k<=31;k++){ if((i%10!=4)&&(j%10!=4)&&(k%10!=4)) cnt++; a[i][j][k]=cnt; } } else if(j==2||j==4||j==6||j==9||j==11){ for(int k=1;k<=30;k++){ if((i%10!=4)&&(j%10!=4)&&(k%10!=4)) cnt++; a[i][j][k]=cnt; } } } } } int main(){ int n,x,y,z; cin>>n; solve(); while(n--){ scanf("%d-%d-%d",&x,&y,&z); int t=(a[2018][4][21]-a[x][y][z]); if((x%10!=4)&&(y%10!=4)&&(z%10!=4)) t+=1; cout<<t<<endl; } return 0; }