他只记得比赛的第一天是星期几(S),最后一场比赛的最后一天是星期几(E)。他还记得比赛的总天数(包括第一和最后一天)不少于L天,也不多于R天。给定S和E,能否唯一确定参加比赛总天数(包含该段时间内比赛间的间隔天数)?
#include<iostream>
using namespace std;
int trans(string s)
{
if(s=="monday") return 1;
else if(s=="tuesday") return 2;
else if(s=="wednesday") return 3;
else if(s=="thursday") return 4;
else if(s=="friday") return 5;
else if(s=="saturday") return 6;
else return 7;
}
int InitialCount(int a,int b)
{
if(a>b) b=b+7;
return b-a+1;
//return a<b? b-a+1:9-(a-b+1);
//初始版本是这样写只对了九个数据点,只从数学计算角度来说感觉两者没区别啊..不知道为什么
}
int main()
{
int T;cin>>T;
for(int x=0;x<T;x++)
{
string S,E;
cin>>S>>E;
int s=trans(S);
int e=trans(E);
int day=InitialCount(s,e);
int L,R,flag=0;
cin>>L>>R;
for(int k=0;;k++)
{
if(day>R) break;
if(day>=L&&day<=R) flag++;
if(flag==2) break;
day+=7;
}
if(flag==0) cout<<"impossible"<<endl;
else if(flag==1) cout<<day-7<<endl;
else cout<<"many"<<endl;
}
}