CF397B题解
题意
这题的题意(为什么没有翻译啊!)是:
你有一些硬币,面值是 $l\sim r (\le 10^9)$,问能不能凑出面值 $n (\le 10^9)$,如果可以就输出 Yes
,否则就输出 No
。
思路
如果要凑的 $n<l$,很明显是无解的,直接输出 No 就可以了,否则就判断 $\left\lceil\dfrac{n}{r}\right\rceil$,这样就可以确定下限,而上限也很好找,就是 $\left\lfloor\dfrac{n}{l}\right\rfloor$,也就是在 $\left\lceil\dfrac{n}{r}\right\rceil\times l$ 到 $\left\lfloor\dfrac{n}{l}\right\rfloor \times r$ 的范围内就一定可以凑出。
注意这个范围int
可能会爆,所以要开long long
。
AC Code
#include<bits/stdc++.h>
using namespace std;
long long t,n,l,r;
int main(){
cin>>t;
while(t--){//有多组数据
cin>>n>>l>>r;
if(n<l){//特判
cout<<"No"<<endl;
continue;
}
//(n-1)/r+1为n/r上取整,(n/l)会自动下取整
if(n>=((n-1)/r+1)*l&&n<=(n/l)*r){
cout<<"Yes"<<endl;
}
else{
cout<<"No"<<endl;
}
}
return 0;
}