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猫是一个很喜欢玩数字游戏的会说话的肥猫,经常会想到很多很好玩的 ...
随机推荐
- 动态规划:HDU1069-Monkey and Banana
Monkey and Banana Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- webpack + babel + vue 环境设置
npm i webpack --save-dev npm install style-loader css-loader url-loader babel-loader sass-loader fil ...
- 【01】《html5权威指南》(扫描版)(全)
[01]<html5权威指南>(扫描版)(全) []魔芋:无高清电子书. 只看第五部分,高级功能. 作者:(美)弗里曼 著,谢延晟,牛化成,刘美英 译 [美]adam freeman ...
- Autofac Mvc5 Nuget
Autofac 3.5.2 Install-Package Autofac -Version 3.5.2 Autofac ASP.NET MVC 5 Integration 3.3.3 Install ...
- MFC定时关机程序的实现1
写个定时关机程序自用,界面简单实用,最终界面如下 第一步,新建一个MFC对话框应用程序,拖几个控件过来, 界面如下: 然后给下拉列表框,复选按钮绑定变量,以方便进行操作. CComboBox m_co ...
- 基于web自动化测试框架的设计与开发(讲解演示PPT)
- c语言入门-03-数据和c
1>C语言提供两大系列的多种数据类型 1 /*platinum.c*/ 2 #include <stdio.h> 3 4 int main(void){ 5 float weight ...
- 配置kubectl客户端通过token方式访问kube-apiserver
使用的变量 本文档用到的变量定义如下: $ export MASTER_IP=XX.XX.XX.XX # 替换为 kubernetes master VIP $ export KUBE_APISERV ...
- web访问流程
客户端发送请求—->httpd得到请求—->httpd解析请求的格式(html,css,jsp)—->请求相应的PHP解析—->PHP解析程序执行完毕—–>db(数据库) ...
- mouseClicked、mousePressed、mouseReleased 的区别
2014年03月16日 21:12:10 xiaobineric 阅读数 9681 标签: 鼠标 事件 关于这3个事件,一直搞不清楚甚至混淆,也已经有一些人说过,但觉得不够明白,最近看了一段教材的 ...