博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
怎样去思考问题 解决问题 zkc学长的福利
阅读量:7253 次
发布时间:2019-06-29

本文共 1469 字,大约阅读时间需要 4 分钟。

题目描述又是一年ACM集训的时刻,zkc学长邀请n位同学来玩一个有奖游戏。首先,他让每个同学在左、右手上面分别写下一个整数,zkc学长自己也在左、右手上各写一个整数。然后,让这n位同学排成一排,zkc学长站在队伍的最前面。排好队后,所有的同学都会获得zkc学长分发的若干肉松饼,每位同学获得的肉松饼数分别是:排在该同学前面的所有人的左手上的数的乘积除以他自己右手上的数,然后向下取整得到的结果。zkc学长不希望某一个同学获得特别多的福利,所以他想请你帮他重新安排一下队伍的顺序,使得获得福利最多的同学,所获福利尽可能的少。注意,zkc学长的位置始终在队伍的最前面。【数据范围】 对于100%的数据,有1 ≤ n ≤1,000,0 < a、b < 10000输入第一行一个n表示n个同学第二行两个数字代表zkc学长左手和右手的数字接下来的n行分别代表第n个同学左手和右手的数字输出一个数字代表获得福利最多同学所获得福利样例输入31 12 37 44 6样例输出2提示按1、2、3号同学这样排列队伍,获得福利最多的同学所获得肉松饼数为2; 按1、3、2这样排列队伍,获得福利最多的同学所获得肉松饼数为2;按2、1、3这样排列队伍,获得福利最多的同学所获得肉松饼数为2;按2、3、1这样排列队伍,获得福利最多的同学所获得肉松饼数为9;按3、1、2这样排列队伍,获得福利最多的同学所获得肉松饼数为2;按3、2、1这样排列队伍,获得福利最多的同学所获得肉松饼数为9。因此,福利最多的同学最少获得2个肉松饼,答案输出2。

最重要的话就是   排在前面同学 左手上数字的成绩除以这个同学的右手数字 就是这个同学应有的饼干数 .

 

 

现在 如果A在B的前面  那么A 所获得的饼的数量  t/r.a   B得到的饼的数量就是  t*la/rb  

现在 如果B在A的前面  那么B 所获得的饼的数量  t/r.b   A得到的饼的数量就是  t*lb/ra

假设 A必须在B的前面  那么 一定可以推导出来一个包含 四个变量的  表达式  用于排序

现在关键的就是  为什么 A必须排在B的前面   最外层的原因就是 为了得到 饼干数量最多的人  得到的饼干尽量的少    

所以该问题可以简化为    前面的所有同学的左手只是一只A手   那只A手上面的数字是B前面所有同学的左手乘积   于是 现在就简化为了两个人的问题.     同样的一个人  是  排在前面的到 饼的数量多还是 排在后面得到的饼的数量多呢 . 很明显是排在  后面的 多 所以  为什么  A排在 B的前面 因为        t*la/rb<t*lb/ra   (这样  最大的数量就尽量的小了   )   

1 #include
2 #include
3 using namespace std; 4 struct S 5 { 6 int r,l; 7 }; 8 bool cmp(S a,S b) 9 {10 return a.l*a.r
maxn)33 maxn=j-1;34 else35 maxn=j;36 printf("%.0lf\n",maxn);37 }38 return 0;39 }

 好像数据变大了,我的方法过不掉了,   请等一下我修正后的代码。

转载于:https://www.cnblogs.com/A-FM/p/5184045.html

你可能感兴趣的文章
集合和泛型 一
查看>>
php 把一个一维数组的值依次赋值到二维数组中的每一项
查看>>
CF_315C_Sereja and Contest
查看>>
vue,下级页面刷新导致路由跳转带过来的数据消失的解决方法
查看>>
border的简略
查看>>
正则表达式---------------嵌套的分组
查看>>
【转载】啥,又要为表增加一列属性?
查看>>
echo
查看>>
接口测试工具-Jmeter使用笔记(九:跨线程组传递变量)
查看>>
(五)CXF之添加拦截器
查看>>
MySQL系列(四)
查看>>
adb--monkey 压力测试工
查看>>
C语言文件操作函数大全(超详细)
查看>>
sql语句
查看>>
log4j配置
查看>>
安装程序无法创建新的系统分区
查看>>
SpringMVC返回json的问题
查看>>
[LOJ] 分块九题 1
查看>>
DOM
查看>>
C++的特殊工具与技术
查看>>