题解:P14257 嫉妒(jealousy)
VinstaG173 · · 题解
tag:模拟。
从 Yes;若都不是,则答案为 No。
每次暴力从
Code:
int n,y,s,t;
inline void solve(){
cin>>n>>y>>s>>t;
int flag=0;
for(int i=1;i<=n;++i){
int flag_0=1,flag_1=1;
for(int j=0;y+j*t<=(i-1)*s;++j)
if(y+j*t==(i-1)*s)
flag_0=0;
for(int j=0;y+j*t<=i*s;++j)
if(y+j*t==i*s)
flag_1=0;
if(flag_0&&flag_1)flag=1;
}if(flag)cout<<"Yes\n";
else cout<<"No\n";
}
Bonus
事实上可以用取模将单次判断优化至
只需要实现一个函数 false,则答案为 Yes,否则答案为 No。时间复杂度优化为
Code:
int n,y,s,t;
bool check(int x){
return (x*s>=y)&&((x*s-y)%t==0);
}
void solve(){
cin>>n>>y>>s>>t;
int flag=0;
for(int i=1;i<=n;++i)
if(!check(i-1)&&!check(i))
flag=1;
if(flag)cout<<"Yes\n";
else cout<<"No\n";
}
另外此题还有一个性质:将
这是因为当
综合以上情况,可以得到 No。则一定 No,即这是一个等价条件。
这个条件与 for 循环中的 n 改为 min(3,n) 即可。