Recently, Fancy is invited by his best friend to make a trip to his new house. Fancy is really excited by the invitation, so he's going to start the trip as soon as possible. But there are several difficulties to overcome. First, his friend is living in Changsha and Fancy is living in Hangzhou, so the trip is really a long one. Second, Fancy has only a bike to make this trip. Third, Fancy is a strange guy who would never work for longer than 8 hours on weekdays, and he would never work for longer than 4 hours on the weekend.
During this trip, Fancy thinks that riding bike is his only work. So on days of Monday to Friday, he will ride his bike 8 hours at most, and on Saturday and Sunday, he will ride 4 hours at most. Obviously, he will finish the trip as early as possible.
Now Fancy is going to start the trip, with information of road length and his riding speed, he wants to know that what day is his arriving day.
There'll be several test cases. For each test case, there will be a string startday (startday ∈ {'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'}), an integerL (100 ≤ L ≤ 1000000000) and a float number s (5 ≤ s ≤ 30, with at most 3 decimal points). Here startday is the day which Fancy start the trip, L is the total length of the trip (in kilometer) and s is Fancy's riding speed (kilometer per hour).
For each test case, please print the earlist day called arriveday which Fancy will arrive at Changsha. Please note that your output should fulfill arriveday ∈ {'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'}.
Monday 800 25.0 Sunday 300 5.0
Thursday Monday
#include<iostream> #include<cstring> #include<cmath> #include<cstring> #include<cstdio> #include<algorithm> #include<map> using namespace std; double eps=0.0001; char a[7][20]= {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"}; int main() { char s[20]; double l,v; //距离与一小时的速度 double weekv,eiv,fouv; //一周的路程,八小时的路程,四小时的路程 int i,sta; while(~scanf("%s%lf%lf",s,&l,&v)) { for(i=0; i<7; i++) if(strcmp(a[i],s)==0) { sta=i; break; } weekv=48.0*v,eiv=8.0*v,fouv=4.0*v; int len=l/weekv; l-=len*weekv; if(l==0) sta=(sta-1+7)%7; //说明一个回合过来了,好不容易找出来的bug else { while(l>=0) { if(sta>=0&&sta<=4) //周一到周五可以走到 { if(l<=eiv) break; l-=eiv; //周一到周五不能走到 sta=(sta+1)%7; } else { if(l<=fouv) //周六到周日可以走到 break; l-=fouv; sta=(sta+1)%7; //周六到周日不能走到 } } } cout<<a[sta]<<endl; } return 0; }