这是长沙网络赛水题了,上完课回来做的,思路是把日期移动到以星期1开始,然后以七天路程为一个周期长度,进行计算,开始想得太过简单直接超时了,按这样改了之后就A了。
#include<cstdio>
#include<cstring>
const double eps=1e-8;
int dlcmp (double x) {return x<-eps?-1:x>eps;}
int main(){
char ch[20];
double s,L;
int start;
while(scanf("%s",ch)!=EOF){
if(strcmp(ch,"Sunday")==0)start=0;
if(strcmp(ch,"Monday")==0)start=1;
if(strcmp(ch,"Tuesday")==0)start=2;
if(strcmp(ch,"Wednesday")==0)start=3;
if(strcmp(ch,"Thursday")==0)start=4;
if(strcmp(ch,"Friday")==0)start=5;
if(strcmp(ch,"Saturday")==0)start=6;
scanf("%lf %lf",&L,&s);
if(start==0||start==6)L-=s*4;
else if(start!=1)L-=s*8;
while(dlcmp(L)>0&&start!=1){
start=(start+1)%7;
if(start==0||start==6)L-=s*4;
else if(start!=1)L-=s*8;
}
if(dlcmp(L)<0){
if(start==0)printf("Sunday\n");
if(start==1)printf("Monday\n");
if(start==2)printf("Tuesday\n");
if(start==3)printf("Wednesday\n");
if(start==4)printf("Thursday\n");
if(start==5)printf("Friday\n");
if(start==6)printf("Saturday\n");
}
else{
double len=48*s;
double temp=L/len;
int tem=(int)temp;
L = L-tem*len;
if(start==0||start==6)L-=s*4;
else L-=s*8;
while(dlcmp(L)>0){
start=(start+1)%7;
if(start==0||start==6)L-=s*4;
else L-=s*8;
}
if(start==0)printf("Sunday\n");
if(start==1)printf("Monday\n");
if(start==2)printf("Tuesday\n");
if(start==3)printf("Wednesday\n");
if(start==4)printf("Thursday\n");
if(start==5)printf("Friday\n");
if(start==6)printf("Saturday\n");
}
}
return 0;
}