Travel by Bike

这是长沙网络赛水题了,上完课回来做的,思路是把日期移动到以星期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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值