Payment Without Change
题意:你有a个面值为n的硬币和b个价值为1的硬币。现给你一个数,你能否用这些硬币组成价值为这个数的钱。
题解:
简单的思维题,做的时候有一个问题就是求k和x的时候乱了,应该是求出距离s最近的那部分,求法就是s/n得到是刚好接近的那个倍数,在乘上a。
同时理解一下,如果用a*n的时候,b用的是最少的,如果这个时候b不够用,那就一定不行。将s/n * a得到的是比s小一点的那个数。
#include<bits/stdc++.h>
#define ll long long
#define mod 998244353
#define INF 0x3f3f3f3f
const int MAX = 1e5 + 10;
using namespace std;
int main (void)
{
int T;
cin>>T;
while(T--)
{
ll a,b,n,s;
cin>>a>>b>>n;
cin>>s;
if(a*n + b < s)
{
cout<<"NO"<<endl;
}
else
{
ll k = s/n;
ll x = k*n;
if(x + b >= s)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
}
return 0;
}