Wannafly交流赛1_B_硬币【数学】

链接:https://www.nowcoder.com/acm/contest/69/B

来源:牛客网

题目描述

蜥蜴的生日快到了,就在这个月底!

今年,蜥蜴的快乐伙伴之一壁虎想要送好多个1元硬币来恶整蜥蜴。

壁虎身上目前有的硬币种类和数量如下:

c1个1元硬币、c5个5元硬币、c10个10元硬币、c50个50元硬币。

壁虎觉得只送c1个1元硬币不够慷慨,想拿一些币值较大的硬币去换更多的1元硬币,于是跑去找一台自动贩卖机,靠着买东西找零来获得更多1元硬币!

这台自动贩卖机的找零机制如下:

每件物品的价格都是v元(v为给定值),假设你投入的硬币总额是x元(x必须>=v),点选了一样物品后,贩卖机就会落下x-v元。

假设落下的硬币有d1个1元硬币、d5个5元硬币、d10个10元硬币、d50个50元硬币,贩卖机会选择d1+d5+d10+d50最小的方案找你钱,有办法证明这样的方案只有一种。(假设此自动贩卖机每种币值的硬币都有无穷多个。)

现在壁虎想知道,和这台自动贩卖机换钱后(假设壁虎心甘情愿地花巨量时间来买很多用不到的东西来恶整蜥蜴),最多能用多少1元硬币恶整蜥蜴?

输入描述:

输入的第一行有一个正整数T,代表询问数。

接下来有T行,每个询问各占1行,包含五个整数c1,c5,c10,c50,v,分别代表壁虎有的1元、5元、10元、50元的硬币数目以及此自动贩卖机里一件物品的价格。

输出描述:

每个询问请输出一行包含一个整数,代表该询问的答案。

示例一

输入

2

2 0 1 0 3

0 0 0 1 10

输出

6

0

说明

在第一个询问中,你共有2个1元硬币和1个10元硬币,自动贩卖机中一个物品的价格为3元。

首先壁虎可以投一个10元硬币买一件物品,此时贩卖机会找壁虎1个5元和2个1元,之后壁虎再投一个5元买一件物品,贩卖机会再找壁虎2元,于是最后壁虎共有6个1元硬币。

备注:

1<=T<=104

0<=c1,c5,c10,c50<=109

1<=v<=109

思路

假如模拟一遍,就可能因为数据量庞大还TLE;

其实我们可以想想,放进去的50 10 元 最终都会变成 5元 和 1元

那么我们不妨假设 刚开始我们就把所有的50元和10元都变成5元放进去。然后将所有的钱都放进去。每买一件物品,换出的钱币必然是5的余数,所以我们可以知道 买一件物品 所能换得的1元硬币数是 (5 - v % 5) % 5

然后再求一下换几次就好了 最后就能求得换得的总的1元硬币数

AC代码

#include <iostream>       //数学方法
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
#include <cstdlib>
#include <ctype.h>
#include <numeric>
#include <sstream>
using namespace std;
typedef long long LL;
const double PI = 3.14159265358979323846264338327;
const double E = 2.718281828459;
const double eps = 1e-6;
const int MAXN = 0x3f3f3f3f;
const int MINN = 0xc0c0c0c0;
const int maxn = 1e5 + 5;
const int MOD = 1e9 + 7;
LL c[4], a[4] = {1, 5, 10, 50};
LL m, v;
int main()
{
int t;
cin >> t;
while (t--)
{
int c1, c5, c10, c50, v;
scanf("%d%d%d%d%d", &c1, &c5, &c10, &c50, &v);
LL ans = c1;
LL tot = 0;
LL sum = 1LL * c5 *5 + 1LL * c10 *10 + 1LL * c50 * 50;
int add = (5 - v % 5) % 5;
int tmp = add + v;
if (add == 0)
cout << ans << endl;
else
{
LL cnt = sum / tmp;
cout << ans + add * cnt << endl;
}
}
}

Wannafly交流赛1_B_硬币【数学】的更多相关文章

  1. Wannafly交流赛1 _A_有理数 【水】

    Wannafly交流赛1 A有理数 [水] 链接:https://www.nowcoder.com/acm/contest/69/A 来源:牛客网 题目描述 有一个问题如下: 给你一个有理数v,请找到 ...

  2. Wannafly交流赛1 B 硬币[数学思维/贪心]

    链接:https://www.nowcoder.com/acm/contest/69/B来源:牛客网 蜥蜴的生日快到了,就在这个月底! 今年,蜥蜴的快乐伙伴之一壁虎想要送好多个1元硬币来恶整蜥蜴. 壁 ...

  3. Wannafly交流赛1(施工中)

    A.有理数 签到题:直接用floor函数就行了,详细看代码 #define debug #include<stdio.h> #include<math.h> #include& ...

  4. Wannafly交流赛1 A 有理数[模拟/分类讨论]

    链接:https://www.nowcoder.com/acm/contest/69/A来源:牛客网 题目描述 有一个问题如下: 给你一个有理数v,请找到小于v的最大有理数. 但这个问题的答案对于任意 ...

  5. 记:青岛理工ACM交流赛筹备工作总结篇

    这几天筹备青岛理工ACM交流赛的过程中遇到了不少问题也涨了不少经验.对非常多事也有了和曾经不一样的看法, ​一直在想事后把这几天的流水帐记一遍,一直没空直到今天考完C++才坐下来開始动笔.将这几天的忙 ...

  6. 青岛理工交流赛 H题 素数间隙

    13110581088注销 素数间隙 Time Limit: 1000MS Memory limit: 262144K 题目描述 Neko猫是一个很喜欢玩数字游戏的会说话的肥猫,经常会想到很多很好玩的 ...

  7. 青岛理工ACM交流赛 J题 数格子算面积

    数格子算面积 Time Limit: 1000MS Memory limit: 262144K 题目描述 给你一个多边形(用’\’和’/’表示多边形的边),求多边形的面积. 输入  第一行两个正整数h ...

  8. ACdream区域赛指导赛之专题赛系列(1)の数学专场

    Contest : ACdream区域赛指导赛之专题赛系列(1)の数学专场 A:EOF女神的相反数 题意:n(<=10^18)的数转化成2进制.翻转后(去掉前导零)输出十进制 思路:water ...

  9. 河南多校大一训练赛 G 硬币

    题目链接:http://acm.hust.edu.cn/vjudge/contest/125004#problem/G 密码:acm Description 宇航员Bob有一天来到火星上,他有收集硬币 ...

随机推荐

  1. 同学帮帮 h5 刮刮卡组件:Txbb.Scratch

    同学帮帮 h5 刮刮卡组件,简洁.无依赖,支持 globals 和 amd 两种调用方式. 暂时只能用在移动端 使用方法 <div id="J-Scratch">< ...

  2. [Tips] Resolve error: server certificate verification failed.

    # sympton: piaoger@piaoger-ubuntu:~/w/temp$ git clone https://mygit/solidmcp/solidmcp.gitCloning int ...

  3. 请写出一个超链接,点击链接后可以向zhangsan@d-heaven.com发送电子邮件。

    请写出一个超链接,点击链接后可以向zhangsan@d-heaven.com发送电子邮件. <a href=”mailto: zhangsan@d-heaven.com”>发邮件</ ...

  4. 时间戳(Unix时间)

    /// <summary> /// 时间戳与DateTime互转 /// </summary> public class UnixOfTimeHelper { /// < ...

  5. mstsc远程登录设置

    mstsc终于可以连上了, 1.系统属性 远程允许, 2.开启三个服务: Remote Desktop ConfigurationRemote Desktop ServicesRemote Deskt ...

  6. iOS开发之--蓝牙开发实战

    转载自:http://www.cnblogs.com/zyjzyj/p/6029968.html ,感谢英杰 前言 最近一直在开发关于蓝牙的功能,本来是不想写这一篇文章,因为网上关于ios蓝牙开发的文 ...

  7. javascript 上传文件相关 (5) Blob 对象

    这一系列文章都讲述的是关于使用 JavaScript 操作文件相关的知识,其中最重要的是 File 对象,而实际上 file 对象只是 blob 对象的一个更具体的版本,blob 存储着大量的二进制数 ...

  8. 160810、Java Object类

    Object 类位于 java.lang 包中,是所有 Java 类的祖先,Java 中的每个类都由它扩展而来. 定义Java类时如果没有显示的指明父类,那么就默认继承了 Object 类.例如: p ...

  9. Linux ping不通百度的解决方法

    今天在学习DNS的时候遇到了一个问题,我的虚拟机能够ping通ip地址,却ping不通www.baidu.com www.qq.com等域名,先是出现了以下报错: 折腾了几个小时终于找到解决办法 1. ...

  10. 在java中public void与public static void有什么区别 ?

    public void 修饰是非静态方法,该类方法属于对象,在对象初始化(new Object())后才能被调用:public static void 修饰是静态方法,属于类,使用类名.方法名直接调用 ...