B. Fancy Coins

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

思路分析:

直接贪心,先把有的钱数的大的值先花了再说,但是有一点要注意,花面值为1的钱的时候不要直接花去,要考虑不用1的话可能话大的用的更少,举个例子,比如,花完了大的和小的还剩2,但大的是3,这样比如就少话一个1了,这样只要一个3就可以,否则就要两个1了
那么这一步该如何操作呢?
此时的m是剪完了大的值后的钱数
(m-na)/b+1 是队伍数(先上取整)*b,如果<=m,那么就说明做法是可行的

        if((m-na)%b!=0&&((m-na)/b+1)*b<=m)
            m=((m-na)/b+1)*b;

完整代码:

#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
#define int long long
using namespace std;
int n,t,a,b,na,nb,m;
signed main()
{
    cin>>t;
    while(t--){   
        a=1;
        cin>>m>>b>>na>>nb;
        int bb=min(nb,m/b);//大的能花多少是多少
        m-=bb*b;
        if(m<=na){//用给的钱就能应付了
            cout<<0<<endl;
            continue;
        }
        if((m-na)%b!=0&&((m-na)/b+1)*b<=m)
            m=((m-na)/b+1)*b;
        else m-=na;
        cout<<m/b+m%b<<endl;
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值