列表

详情


NC54593. 充Q币

描述

zzy,zzf训练时间不饱和,偷偷玩起了欢乐斗地主。 由于两人都是zz,所以很快就输光了所有的欢乐豆。
充值使你变强!zzf的头脑回荡起这句话。于是他决定充值S个Q币(一元对应一Q币)用来获得欢乐豆。
已知他有a个面值为n元的硬币,b个面值为1元的硬币,由于zzf比较穷所以zzf不希望充值多余的Q币。
于是他像你求助他是否可以准确的充值S个Q币,而不造成多余的Q币剩余。

输入描述

输入的第一项只包含一个整数 -测试样例的数量。接下来T组测试样例。
接下来T行,每一行四个整数 ――面值为x硬币的数量,面值为1的硬币数量,数量为a的硬币面值大小,以及需要充值的Q币数量。

输出描述

如果zzf可以准确的充值n个Q币请输出"YES",否则请输出"NO";

示例1

输入:

4
1 2 3 4
1 2 3 6
5 2 6 27
3 3 5 18

输出:

YES
NO
NO
YES

说明:

对于第一组测试样例, zzf可以选择1个面值为3的硬币和1个面值为1的硬币,来充值4个Q币。
对于第二组和第三组测试样例,zzf无论怎么选择都无法获得准确的S个Q币。
对于第四组样例,zzf可以选择3个面值为5的硬币,以及3个面值为1的硬币,来充值18个Q币。

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 47ms, 内存消耗: 632K, 提交时间: 2021-10-28 16:12:34

#include<iostream>
#include<cstring>
using namespace std;
int main(){
    int t;cin>>t;
    int a,b,n,s;
    while(t--){
        cin>>a>>b>>n>>s;
        int cnt=s-min(s/n,a)*n;
        if(b>=cnt)cout<<"YES"<<endl;
        else cout<<"NO"<<endl;
    }
    return 0;
}

C++(g++ 7.5.0) 解法, 执行用时: 44ms, 内存消耗: 556K, 提交时间: 2023-03-29 15:37:17

#include<iostream>
using namespace std;
int main()
{
	int t; cin >> t;
	while (t--)
	{
		int long long a, b, n, S;
		cin >> a >> b >> n >> S;
		int long long g= min(S / n , a);
		if (g * n + b >= S)cout << "YES" << endl;
		else cout << "NO" << endl;
	}
}

C 解法, 执行用时: 8ms, 内存消耗: 388K, 提交时间: 2021-10-28 20:30:08

#include<stdio.h>
int main(){
    int t;int a,b,n,s;
    scanf("%d",&t);
    while(t--){
        scanf("%d%d%d%d",&a,&b,&n,&s);
        s-=(s/n<a?s/n:a)*n;
        if(s<=b)printf("YES\n");
        else printf("NO\n");
    }
    return 0;
}

上一题