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猫是一个很喜欢玩数字游戏的会说话的肥猫,经常会想到很多很好玩的 ...
随机推荐
- [BSOJ2684]锯木厂选址(斜率优化)
Description 从山顶上到山底下沿着一条直线种植了n棵老树.当地的政府决定把他们砍下来.为了不浪费任何一棵木材,树被砍倒后要运送到锯木厂.木材只能按照一个方向运输:朝山下运.山脚下有一个锯木厂 ...
- C#开发模式——dll多级引用的问题
C#解决方案里有两种引用方式,项目引用和dll物理文件引用. 一.项目引用 严格引用,项目文件需包含在解决方案里,好处是便于调试,可直接进入代码.缺点是耦合度太高(必须全部编译通过才能run起来),项 ...
- qt4.8.5 qtwebkit 静态编译 版本
2013年就编译好了,qtwebkit是最不好编译的了,尤其是静态编译,这儿分享给大家 估计总有人会用得到... 静态库下载地址:http://yunpan.cn/cyyNqrApbVDwq 提取码 ...
- 如何排查Java内存泄漏?看完我给跪了!
没有经验的程序员经常认为Java的自动垃圾回收完全使他们免于担心内存管理.这是一个常见的误解:虽然垃圾收集器做得很好,但即使是最好的程序员也完全有可能成为严重破坏内存泄漏的牺牲品.让我解释一下. 当不 ...
- 项目中的小点_java项目某jsp页面报404
1.将项目文件夹直接放在tomcat服务器的webapps路径下 2.从一个tomcat服务器webapps下拷贝一个项目到另一个tomcat服务器webapps路径下 3.重启tomcat后,访问新 ...
- Flask 中蓝图的两种表现形式
最近在学Flask,特有的@X.route 很适合RESTfuld API, 一般小型应用,在一个py文件中就可以完成,但是维护起来比较麻烦. 想体验Django那样的MVT模式, 看到 Flask提 ...
- linux下jenkins学习之简单安装
前提:安装包从官网获取https://pkg.jenkins.io/redhat-stable/jenkins-2.7.4-1.1.noarch.rpm 1.在线下载 Sudo -O wget htt ...
- jupyter-notebook快捷键的使用
jupyter-notebook快捷键的使用 工具有个键盘图标可以看所有快捷键 Esc + F 在代码中查找.替换 Esc + O 在cell和输出结果间切换. Shift + J 或 Shift + ...
- maven学习(三)——修改maven本地默认仓库
修改从Maven中心仓库下载到本地的jar包的默认存储位置 从Maven中心仓库下载到本地的jar包的默认存放在”${user.home}/.m2/repository”中,${user.home}表 ...
- java中使用二进制进行权限控制
基本概念 package test; publicclass Rights { publicstaticvoid main(String[] args) { int a=1; // 001 状态a i ...