题目描述
有一天,小明想偷吃隔壁老王院子里苹果树上的苹果。
但是,老王家有一条哈士奇,每隔一定时间就会吼叫。准确的说,它会在一个时间点吼叫第一次,之后每隔一段时间吼叫两次,比如第一次吼叫是在t时刻,间隔为s,则吼叫时间点为t, t + s, t + s + 1, t + 2s, t + 2s + 1等。
小明是个要面子的人,不想被这么二的汪吼,所以想请你预测一下结果。
给出吼叫时间和小明的行动时间,如果会被吼则输出”YES”,否则输出”NO”。
输入
第一行一个整数T,表示数据组数
对于每组数据,给出三个整数t s x,分别表示第一次吼叫的时间,吼叫间隔,和小明行动时间。
数据约定:
0 ≤ t, x ≤ 1e9, 2 ≤ s ≤ 1e9
输出
输出YES或NO
样例输入
4
3 10 4
3 10 3
3 8 51
3 8 52
样例输出
NO
YES
YES
YES
这个题做了许多遍,始终没找出bug在哪,到最后也没能提交/(ㄒoㄒ)/~~
wa代码:
#include <cstdio>
#include <iostream>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
int s, t, x;
int T;
cin>>T;
while(T--)
{
int flag = 0;
cin>>s>>t>>x;
if(s>=2)
{
int i = 0;
int k = x - s;
while(k >= 0)
{
if(k == 0)
{
flag = 1;
break;
}
if(i > 0)
if(k - 1 == 0)
{
flag = 1;
break;
}
i++;
k = x - s - i * t;
}
if(flag)
printf("YES\n");
else
printf("NO\n");
}
}
return 0;
}
ac代码:
#include <iostream>
#include <string>
#include <iomanip>
#include <algorithm>
using namespace std;
int main()
{
int z,t,x,i,s;
int T;
cin>>T;
for(int j=0;j<T;j++)
{
int i=1;
cin>>t>>s>>x;
z=t;
while(z<x)
{
z=t+i*s;
if(z<x)
{
z++;
}
i++;
}
if(z==x)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}
港真,能看懂ac的代码,但是觉得也找不出自己的错在哪……心累
NO
YES
YES
YES