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;
}
posted @ 2023-08-08 17:42  very_easy  阅读(7)  评论(0)    收藏  举报  来源