What day is it
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2921 Accepted Submission(s): 858
Problem Description
Today is Saturday, 17th Nov,2007. Now, if i tell you a date, can you tell me what day it is ?
Input
There are multiply cases.
One line is one case.
There are three integers, year(0<year<10000), month(0<=month<13), day(0<=day<32).
One line is one case.
There are three integers, year(0<year<10000), month(0<=month<13), day(0<=day<32).
Output
Output one line.
if the date is illegal, you should output "illegal". Or, you should output what day it is.
if the date is illegal, you should output "illegal". Or, you should output what day it is.
Sample Input
2007 11 17
Sample Output
Saturday#include<iostream> #include<cstdio> using namespace std; typedef struct { int year,mon,day; }Yer; int month[13]={0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; bool is_leap(int year) { if((year%4==0&&year%100)||(year%400==0)) return true; return false; } bool is_legal(Yer cur) { if(cur.year<= 0||cur.year>=10000||cur.mon<=0||cur.mon>=13||cur.day<=0||cur.day>=32) return false; if((!is_leap(cur.year)&&cur.day<=month[cur.mon])||(cur.mon==2&&is_leap(cur.year)&&cur.day<=month[cur.mon]+1)) return true; else return false; } bool is_pre(Yer a,Yer b) { if(a.year<b.year) return true; else if(a.year==b.year&&a.mon<b.mon) return true; else if(a.year==b.year&&a.mon==b.mon&&a.day<b.day) return true; else a return false; } void print(bool flag,int sum) { sum=sum%7; if(!flag) sum=7-sum; sum=sum%7; switch(sum) { case 0:printf("Saturday\n");break; case 2:printf("Monday\n");break; case 3:printf("Tuesday\n");break; case 4:printf("Wednesday\n");break; case 5:printf("Thursday\n");break; case 6:printf("Friday\n");break; case 1:printf("Sunday\n");break; } return ; } void calculate(bool flag,Yer a,Yer b) { int i,sum; int ta,tb; sum=0; ta=0; int taa=365; for(i=1;i<a.mon;i++) { if(i==2&&is_leap(a.year)) { ta+=1; taa=366; } ta+=month[i]; } ta+=a.day; tb=0; for(i=1;i<b.mon;i++) { if(i==2&&is_leap(b.year)) { tb+=1; } tb+=month[i]; } tb+=b.day; if(a.year==b.year) { sum=tb-ta; print(flag,sum); return ; } for(i=a.year+1;i<b.year;i++) { if(is_leap(i)) sum+=1; sum+=365; } sum=sum+taa-ta+tb; print(flag,sum); return; } int main() { Yer cur,fixed; fixed.year=2007; fixed.mon=11; fixed.day=17; while(~scanf("%d%d%d",&cur.year,&cur.mon,&cur.day)) { if(!is_legal(cur)) { printf("illegal\n"); continue; } if(is_pre(fixed,cur)) calculate(true,fixed,cur); else calculate(false,cur,fixed); } return 0; }