好久没来英雄会了,所以今天来看看几题,看到“罐子与硬币”这一题不错,这种题目比较适合我的味道,不过,可惜啊...性子太急,分没到手...

题目如下:

有n个罐子,有k个硬币,每个罐子可以容纳任意数量的硬币。罐子是不透明的,起初你可以随机把这k个硬币任意放在罐子里。然后罐子被打乱顺序,你从外表无法区别罐子。最后罐子被编上号1-n。你有p次机会,每次你可以选择某个罐子,如果该罐子里有硬币,则你可以得到1个(你不可以知道该罐子里有多少硬币),如果该罐子是空的,你得不到任何硬币。

你最终要得到至少c枚硬币,我们的问题是给定n,k,c,求出最少的p,存在一种你最初放硬币的方式,无论罐子如何被打乱顺序,你都能p次机会内获得至少c个硬币。

输入n,k,c (0 < n <=1000000, 0 < c <= k <=1000000)。

输出,最小的p值。 例如n = 3, k = 6, c = 4。 你可以把每个罐子放入两个硬币,这样得到4次机会可以得到4个硬币,输出4。

题目的要求是:无论罐子如何被打乱顺序,都能p次机会内获得至少c个硬币。我们可以这样理解,只要存在空的,我们肯定会选中;

错误1:将k个硬币先均匀分到n个罐子中,多余的部分则每一个分到罐子中;

这样提交:

    if(k < c)return 0;int num = k / n;  //每个罐子可以放的硬币int count  = k % n;  //多出的硬币if(num * n >= c)return c;else{int count1 = n - count;  //此时的空瓶int p = count1 + c;return p;}

测试点n = 3, k = 6, c = 4倒是过了,可是提交上去,说测试点n = 3, k = 4,c = 4没过;

运行了一下,我的结果是6

可是一想,如第一个罐子为空,第二个,第三个罐子放两个

这样我们首先抽到第一个罐子,后面四次分别为第二个、第三个、第二个、第三个,只需五次即可

错误2:所以这样理解,将k个硬币真正均分至i个罐子中,n - i个罐子为空,如下:

    if(k < c)return 0;int num = k / n;  //每个罐子可以放的硬币if(num * n >= c)return c;else{for(int i = n; i > 0; i--){if(k % i == 0){return c + n - i;}}}

可是这样的结果依然没过,测试点n = 1000, k = 12345, c = 12340,我的结果是12517。

这次的数据有点大,我也画不出来啊...

终结:这时候想到早上转的篇文章,当你学不进去的时候,试试“普瑞馬”法则中的大脑集中精力最多只有25分钟。这是对成人而言,所以学习20到30分钟后就应该休息10分钟。你可以利用这段时间做点家务,10分钟后再回来继续学习,效果会更好。”正巧到饭点的时间,就去吃了个饭,回来突发奇想:

我们可以有n1个罐子是空的,n2个罐子是装k1个硬币的(n2为1或0),n3个罐子是装k2个硬币的。

n1 + n2 + n3 = n;

n1 * 0 + n2 * k1 + n3 * k2 = k;

其中包括的上面的第二种情况,即n2 = 0时,有n1 + n2个罐子为空,n3个罐子是k2个硬币,当然k1 < k2,否则我们寻找硬币到后来连n3个空罐子都得加上了...;

#include <stdio.h>
#include <iostream>
#include <string>
using namespace std;
class Test {
public:static int pvalue (int   n,int   k,int   c){if(k < c)return 0;int num = k / n;  //每个罐子可以放的硬币int max = 100000000;if(num * n >= c)return c;else{for(int i = n - 1; i > 0; i--){num = k / i;  //装i个整罐子,每个装numint num1 = k - num * i;  //多的一个罐子装num1个int p;if(num1 == 0)  //{p = n - i + c;}else{if(c <= num1 * (i + 1) && num > num1){p = n - i - 1 + c;}else if(num > num1)p = n - i - 1 + c + 1;elsep = c + n - 1;}if(max > p)max = p;}}return max;}
};
//start 提示:自动阅卷起始唯一标识,请勿删除或增加。
int main()
{   cout<<Test::pvalue(3,4,4)<<endl;
}
//end //提示:自动阅卷结束唯一标识,请勿删除或增加。  

老话说,事不过三,这第三次的提交终于对了...

(*∩_∩*)

罐子与硬币--【英雄会】相关推荐

  1. 51nod-1246:罐子和硬币

    1246 罐子和硬币 题目来源: FaceBook HackerCup 比赛题 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题  收藏  关注 有n个罐子,有k个硬 ...

  2. LeetCode简单题之排列硬币

    题目 你总共有 n 枚硬币,并计划将它们按阶梯状排列.对于一个由 k 行组成的阶梯,其第 i 行必须正好有 i 枚硬币.阶梯的最后一行 可能 是不完整的. 给你一个数字 n ,计算并返回可形成 完整阶 ...

  3. OpenCV(实战)二值图颜色填充(彩色图形、硬币)

    目录 一.彩色图形填充 1.初始效果展示 2.试错过程: 1.试错1:锐化显示所有图片 2.试错2:用礼帽提取出明亮部分 3.正确方式:直接对图片亮度增强(不用形态学处理) 总代码 二.硬币填充 1. ...

  4. OpenCV(26)图像分割 -- 距离变换与分水岭算法(硬币检测、扑克牌检测、车道检测)

    目录 一.基础理论 1.思想 2.原理 二.分水岭实战:硬币 步骤归纳 1.把原图像转二值图 2.开运算去噪 3.确定背景区域(膨胀)(得到背景/最大连通域) 4.确定前景区域(距离变换) (分离)( ...

  5. [bzoj1042][HAOI2008]硬币购物

    有三种硬币,每种有自己的币值. 然后有n次询问,每次都给出每种硬币的数量和要付的钱s,求有多少种付法.n<=1000 s<=100000 ------ 不考虑限制,就是个简单dp.... ...

  6. 年年英雄会,岁岁侠客行

    虽然今年工作比较忙,但还是坚持参加了CSDN组织的英雄会第二届.如去年所约,CSDN在持续发展着,而英雄会这一中国独特的程序员式的聚会,胜利地举办了第二届. 虽然不能成为MVB,但还是感谢CSDN记得 ...

  7. 关于stm32f407wifi模块的设置_料粉定量称重模块,罐子称重传感器

    料粉定量称重模块,罐子称重传感器 上海恒刚生产销售的称重模块采用了的传感器元件,其特点是结构紧凑,不需安装其他配件,自稳定的传感器承压头使计量,重复性好:高速简便的安装,节约安装和停机维修时间,称重模 ...

  8. 关于60枚一分两分五分硬币凑成一块钱的解决方法

    关于60枚一分两分五分硬币凑成一块钱的解决方法 一.强行三重for循环 #include<stdio.h> int main() {int a, b, c;for (a = 1; a &l ...

  9. BZOJ1042 [HAOI2008]硬币购物

    Description 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了tot次.每次带di枚ci硬币,买s i的价值的东西.请问每次有多少种付款方法. Input 第 ...

最新文章

  1. VMware workstation安装
  2. linux变量赋值用中括号,Shell脚本定义变量和重新赋值
  3. PID控制方法及C语言其实现
  4. 增量调制原理matlab仿真,增量调制(DM  △M)
  5. 为什么用pyqt的不多_现在农村提倡用天然气和清洁煤球取暖,为何农民不爱用?看完懂了...
  6. 戴尔融合“刀片”+双活存储助用户三网改造
  7. TensorFlow神经网络(一)前向传播
  8. python零基础自学教材-Python零基础入门到精通自学视频教程
  9. SpringBoot+JSON+AJAX+ECharts+Fiddler实现前后端分离开发可视化(进阶篇)
  10. [leetcode题解] 第995题Minimum Number of K Consecutive Bit Flips
  11. 2021-07-17
  12. 华为平板电池损耗用什么软件测试,平板怎么看电池损耗
  13. java设计模式总结之六大设计原则(有图有例子)
  14. win10护眼模式_Win10系统中你不知道的小秘密,今天解开了,学会了提高工作效率...
  15. 算法思想理解系列 -- 检索排序学习之pairwise类型
  16. 在MindMapper中怎样进行添加附件
  17. C++17之std::visit
  18. 【c#编程技术总结】IO文件流的应用
  19. kali渗透80端口的php,一次对内网服务器的KALI渗透测试
  20. 使用GetData Graph Digitizer,没有坐标界面出现。

热门文章

  1. Redis学习笔记(数据结构篇)String
  2. 新瑞鹏“狂飙”,宠物医疗是门好生意吗?
  3. 【报告分享】2021小红书品牌投放产品介绍-小红书(附下载)
  4. Zabbix agent2安装
  5. 第1关:knn算法概述
  6. 喜欢花,喜欢海,喜欢日出和日落
  7. 千兆网络PHY芯片 RTL8211E的实践应用(原理图及PCB实现)
  8. 《塞尔达传说:旷野之息》中设计元素的分析
  9. Java-枚举类enum及常用方法
  10. 快来体验一下,让你的浏览器焕然一新