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行,包含五个整数c.
分别代表壁虎有的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<=10
[分析]:注释
[代码]:
#include<bits/stdc++.h>
using namespace std;
long long c1, c5, c10, c50, v;
int main(){
int _;
scanf("%d", &_);
while(_--){
scanf("%lld%lld%lld%lld%lld", &c1, &c5, &c10, &c50, &v);
c5 += c10 * + c50 * ; //总共有多少张5元
long long cnt = ceil(v * 1.0 / ); //买一个需要多少张5元
long long cg = cnt * - v; //找回的1元是多少
c1 += cg * (c5 / cnt); //能买c2/cnt个v
printf("%lld\n", c1);
}
return ;
}
/* 很容易可以看出10元所能找回的最大1元数和两张5元是一样的. 一个十元硬币等价于两个五元硬币,举个简单的例子:
有一个十元硬币,v=1,则用十元硬币买v,找回1个五元4个一元。
相当于用一个五元的硬币买了东西找回四元,还有剩下五元没用到,
再用这五元去买东西。如此则十元与两个五元是等效的。
*/
数学
#include<bits/stdc++.h>
#define LL long long
#define INF 0x3f3f3f3f
#define lson rt<<1
#define rson rt<<1|1
using namespace std;
const int maxn = 1e5+;
LL a[],v;
int t;
int b[] = {,,,};
int main()
{
scanf("%d",&t);
while(t--){
scanf("%lld%lld%lld%lld%lld",&a[],&a[],&a[],&a[],&v);
for(int i = ;i>=;i--){
LL cnt = (v-)/b[i]+;
LL cnt2 = a[i]/cnt;
if(cnt>a[i]) continue;
a[i] -= cnt2*cnt;
LL tmp = (LL)cnt*b[i]-v;
for(int j = i-;j>=;j--){
a[j] += tmp/b[j]*cnt2;
tmp = tmp-tmp/b[j]*b[j];
}
}
// cout<<"fuc"<<endl;
for(int i = ;i>=;i--){
// cout<<"fwfwgggg"<<endl;
LL tmp = a[i]*b[i];
LL need = v-tmp;
for(int j = i-;j>=;j--){
if(need>a[j]*b[j]){
tmp += a[j]*b[j];
need -= a[j]*b[j];
a[j] = ;
}
else{
LL tmp2 = (need-)/b[j]+;
a[j] -= tmp2;
need = ;
tmp += b[j]*tmp2;
LL tmp3 = tmp-v;
for(int k = i-;k>=;k--){
a[k] += tmp3/b[k];
tmp3 = tmp3-tmp3/b[k]*b[k];
}
}
if(need==){
break;
}
}
}
// cout<<"fwfwf"<<endl;
printf("%lld\n",a[]);
}
}
贪心模拟
Wannafly交流赛1 B 硬币[数学思维/贪心]的更多相关文章
- Wannafly交流赛1_B_硬币【数学】
Wannafly交流赛1_B_硬币[数学] 链接:https://www.nowcoder.com/acm/contest/69/B 来源:牛客网 题目描述 蜥蜴的生日快到了,就在这个月底! 今年,蜥 ...
- Wannafly交流赛1 _A_有理数 【水】
Wannafly交流赛1 A有理数 [水] 链接:https://www.nowcoder.com/acm/contest/69/A 来源:牛客网 题目描述 有一个问题如下: 给你一个有理数v,请找到 ...
- Wannafly交流赛1(施工中)
A.有理数 签到题:直接用floor函数就行了,详细看代码 #define debug #include<stdio.h> #include<math.h> #include& ...
- Wannafly交流赛1 A 有理数[模拟/分类讨论]
链接:https://www.nowcoder.com/acm/contest/69/A来源:牛客网 题目描述 有一个问题如下: 给你一个有理数v,请找到小于v的最大有理数. 但这个问题的答案对于任意 ...
- 记:青岛理工ACM交流赛筹备工作总结篇
这几天筹备青岛理工ACM交流赛的过程中遇到了不少问题也涨了不少经验.对非常多事也有了和曾经不一样的看法, 一直在想事后把这几天的流水帐记一遍,一直没空直到今天考完C++才坐下来開始动笔.将这几天的忙 ...
- 程序设计中的数学思维函数总结(代码以C#为例)
最近以C#为例,学习了程序设计基础,其中涉及到一些数学思维,我们可以巧妙的将这些逻辑问题转换为代码,交给计算机运算. 现将经常会使用到的基础函数做一总结,供大家分享.自己备用. 1.判断一个数是否为奇 ...
- PJ考试可能会用到的数学思维题选讲-自学教程-自学笔记
PJ考试可能会用到的数学思维题选讲 by Pleiades_Antares 是学弟学妹的讲义--然后一部分题目是我弄的一部分来源于洛谷用户@ 普及组的一些数学思维题,所以可能有点菜咯别怪我 OI中的数 ...
- UVa10025 The ? 1 ? 2 ? ... ? n = k problem 数学思维+规律
UVa10025 ? 1 ? 2 ? ... ? n = k problem The problem Given the following formula, one can set operator ...
- 青岛理工交流赛 H题 素数间隙
13110581088注销 素数间隙 Time Limit: 1000MS Memory limit: 262144K 题目描述 Neko猫是一个很喜欢玩数字游戏的会说话的肥猫,经常会想到很多很好玩的 ...
随机推荐
- Codeforces Round #462 (Div. 2) A Compatible Pair
A. A Compatible Pair time limit per test1 second memory limit per test256 megabytes Problem Descript ...
- U1
如果 activity_main.xml没有xml代码可以对图像右键 go to mxl同时可以在design 和 text 切换 在安装了Android Studio3.3版本之后,第一个He ...
- Hive UDF开发指南
编写Apache Hive用户自定义函数(UDF)有两个不同的接口,一个非常简单,另一个...就相对复杂点. 如果你的函数读和返回都是基础数据类型(Hadoop&Hive 基本writable ...
- Android Studio 快捷键(包含自定义)终极版
[F] [F] F2 在错误代码之间切换 F3 往前定位(Shift + F3:往后定位 )有问题 F4\Ctrl+鼠标点击\Ctrl+B 转到定义,查看类继承关系 F5 但不调试进入函数内部. ...
- 【Set Matrix Zeros】cpp
题目: Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place. cl ...
- Mybatis使用- Mybatis JdbcType与Oracle、MySql数据类型对应列表 ; Mybatis中javaType和jdbcType对应关系
Mybatis JdbcType与Oracle.MySql数据类型对应列表 Mybatis JdbcType Oracle MySql JdbcType ARRAY JdbcType BIG ...
- Zookeeper CreateMode
通过CreateMode 可以设置在zookeeper中创建节点的类型,节点类型共有4种: EPHEMERAL:临时节点 EPHEMERAL_SEQUENTIAL:有序的临时节点 PERSISTENT ...
- ABP 未能加载文件或程序集“System.ComponentModel.Annota, Version=4.2.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。
切换System.ComponentModel.Annotations版本到4.4.1 重新编译即可
- selenium webdriver——控制浏览器
from selenium import webdriver import time def controlBrowser(): #启动浏览器 driver = webdriver.Firefox() ...
- BZOJ 1787: [Ahoi2008]Meet 紧急集合(lca+贪心)
[Ahoi2008]Meet 紧急集合 Description Input Output Sample Input 6 4 1 2 2 3 2 4 4 5 5 6 4 5 6 6 3 1 2 4 4 ...