比赛时看这道题,,那叫一个杯具,一直在想到底怎么输入数据,,现在才发现,竟然可以用scanf直接输入,,,这个,让我有点接受不了,,亏我当时还在想用字符串之类的,唉!看来基础知识还都没掌握啊。。。题目:
- 输入
- 一个数T,后面T行每行有一个日期,格式是YYYY-MM-DD。如我的生日是1988-03-07。
- 输出
- T行,每行一个数,表示此人从出生到20岁生日所经过的天数。如果这个人没有20岁生日,就输出-1。
- 样例输入
-
1 1988-03-07
- 样例输出
-
7305
ac代码,,用cin和cout竟然tle,,,用scanf和printf竟然只花了76ms,,差距之大,令我震惊!
#include <iostream> #include <cstdio> #include <string.h> using namespace std; bool runnian(int n) { if(n%400==0||(n%4==0&&n%100!=0)) return true; return false; } int main() { //freopen("1.txt","r",stdin); int kk; scanf("%d",&kk); while(kk--) { int year,month,day; //cin>>year>>month>>day; scanf("%d-%d-%d-",&year,&month,&day); if(runnian(year)&&month==2&&day==29&&!runnian(year+20)) printf("-1\n"); else { int sum=0; if(month<=2) { for(int i=year;i<year+20;++i) { if(runnian(i)) sum+=1; } sum+=20*365; } else { for(int i=year+1;i<=year+20;++i) { if(runnian(i)) sum+=1; } sum+=20*365; } printf("%d\n",sum); } } return 0; }