ZCMU--5018喝可乐--贪心。

ZCMU–5018喝可乐–贪心。

题目链接:https://acm.zcmu.edu.cn/JudgeOnline/problem.php?id=5018
Description

可乐有一个很经典的活动:四个瓶盖可以换一瓶可乐
现在zbj一共想喝n瓶可乐,一瓶可乐需要m元,请问他最少需要花多少钱?
P.S.他不可以向别人借瓶盖

Input
第一行一个整数t,表示接下去有t组询问
接下去t行每行包含两个整数n , m ,含义如题

Output
每行输出一个整数表示zbj最少要花的钱

Sample Input
1
1597 3
Sample Output
3594

HINT
对于 20% 的数据, t<=20,n<=50
对于 100% 的数据,t<=10000,0<=n<=100000000 ,1<=k<=200

思路,大致是拆分,先买四瓶可乐,然后以四瓶为为一组,后面都买三瓶就好。而且后面每一组都会有一个是免费的,所以只要记录一共有几组,就有几个免费的。看下图(字丑见谅)
在这里插入图片描述
由上图,可以轻松的发现,只要我们将它以4瓶一组分类,除了第一排,下面的全部都会有一个免费的,只要记录有多少免费的,就能找到要买多少。
问题一,1,特判,就是如果总数小于5,那么直接相乘就好
问题二,2,如果不是16个,是17个或者18个怎么办?(也就是有余数)
不难办,由上图最后两个绿色的可以看出,如果有余数,那么必定产生一个免费的,在原来的基础上加一即可。
上AC代码。

#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        ll num ;
        ll  price;
        cin>>num>>price;    
        if(num<5)       //解决问题一
        {
            cout<<num*price<<endl;
            continue;
        }
        int t = (num - 4) % 4;
        ll cnt = (num-4) / 4;
        if(t!=0) cnt++;        //解决问题二
        num = num - cnt;
        cout<<price*num<<endl;

    }


    return 0;
}

总结,,这题如果想不到,容易把自己整晕。最后,如果对你有帮助,能否给个三连,然后取消收藏就好,不为别的,就为了那一点点的虚荣心。让我更有动力创作

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

手撕键盘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值