codefoeces B 397 - On Corruption and Numbers

题目大意:在给定的区间【l,r】中能不能选出若干数(同一个数使用的次数不限)使得组成数n,每个数使用的次数不限。

思路:这道题只需要判断一下n是不是在能组成区间的范围内即可。所以可以将使用的最大数量的钱和最少数量的钱算出。那么就得到一个可以凑出钱数的区间[mi*l,mi*r]。(注意再算使用最少数量的钱数时如果能r能被n整除则为n/r,否则为n/r+1 如 7 3 4最少要2个 )


#include <iostream>
#include <cstring>
#include<cmath>
#include<cstdio>
using namespace std;
int main()
{
    long long  n,m,i,j,k,l,r;
    scanf("%lld",&k);
    while(k--)
    {
        scanf("%lld%lld%lld",&n,&l,&r);
        if(n<l)
        {
            printf("No\n");
            continue;
        }
         long long mi;
        long long ma=n/l;
        if(n%r==0)
            mi=n/r;
        else
            mi=n/r+1;
        if(l*mi<=n&&n<=r*ma)
        {
            printf("Yes\n");
        }
        else
            printf("No\n");

    }
    return 0;
}


你可能感兴趣的:(数论)