题目链接:http://codeforces.com/problemset/problem/397/B
题目描述:
你拥有面值l 到 r 的硬币,每种面值都有无数个,比如3 到 6 就是说你有面值为 3 4 5 6 的硬币,每种有无数个,现在问能否用这些硬币恰好凑出正整数 N ?
解题思路:
一道非常。。活泼有趣的数学题,看着很简单,竟然一直WA!!伤心死了,第二天终于想到了正确的姿势。
计算出最少需要多少枚硬币 minn = N / r + 1 ( 整除特例见代码 )
最多需要多少枚硬币 maxn = N / l
你的能力所能达到的凑钱范围是[ minn*l,maxn*r ] 闭区间,这之间的每一块钱都能取到。
注意!要用long long ,不然中间步骤爆出来了
AC代码:
#include <iostream>
#include <cstring>
using namespace std;
typedef long long ll;
int main()
{
ll t,n,l,r,ans;
cin>>t;
while(t--)
{
cin>>n>>l>>r;
if(n<l)
ans=0;
else
{
ll minn,maxn;
maxn=n/l;
if(n%r==0)
minn=n/r;
else
minn=n/r+1;
if(minn*l<=n&&maxn*r>=n)
ans=1;
else
ans=0;
}
if(ans)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
return 0;
}
AC截图: