链接:
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;
}