国王的游戏(华东师范大学-信息学竞赛学教案)
信息学竞赛学教案
【引入问题】:国王的游戏
恰逢H国国庆,国王邀请n位大臣来玩一个有奖游戏。首先,他让每个大臣在左、右手上面分别写下一个整数,国王自己也在左、右手上各写一个整数。然后,让这n位大臣排成一排,国王站在队伍的最前面。排好队后,所有的大臣都会获得国王奖赏的若干金币,每位大臣获得的金币数分别是:排在该大臣前面的所有人的左手上的数的乘积除以他自己右手上的数,然后向下取整得到的结果。国王不希望某一个大臣获得特别多的奖赏,所以他想请你帮他重新安排一下队伍的顺序,使得获得奖赏最多的大臣,所获奖赏尽可能的少。注意,国王的位置始终在队伍的最前面。
【输入】
输入文件为game.in。
第一行包含一个整数n,表示大臣的人数。
第二行包含两个整数a和b,之间用一个空格隔开,分别表示国王左手和右手上的整数。
接下来 n 行,每行包含两个整数 a 和 b,之间用一个空格隔开,分别表示每个大臣左手和右手上的整数。
【输出】
输出文件名为.out。
输出只有一行,包含一个整数,表示重新排列后的队伍中获奖赏最多的大臣所获得的金币数。
【输入输出样例】
Game .in Game .out
3 2
1 1
2 3
7 4
4 6
【输入输出样例说明】
按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。
【数据范围】
对于20%的数据,有1≤n≤10,0 < a、b <8;
对于40%的数据,有1≤n≤20,0 < a、b < 8;
对于60%的数据,有1≤n≤100;
对于60%的数据,保证答案不超过109;
对于 100%的数据,有 1 ≤n ≤1,000,0 < a、b < 10000。
【问题分析】:这道题主要关键是与前面的有关,而与后面的无关。我们可以先确定第n个大臣,然后确定第n-1个大臣,依次类推,因为我们确定了第i个大臣后,第1~i-1个大臣都不用乘以i~n个大臣的左手,也就是没有后效性。那么如果第i个大臣是排在最后,那么就要奖赏:left(1,n)/(right(i)*left(i)),我们把每一位大臣的这个值算出来,装在v数组里面,然后按从大到小排序。为什么是从大到小呢,如图所示,数组v,已按从大到小排序,所以v[i]>v[j].
如果i、j的位置不变,那么奖赏最多的大臣有可能在i、j之间,但是如果把i、j的位置转换,我们知道,在v[i]~v[j]之中,v[i]是最大的所以获得最多的奖赏的大臣肯定是i,比之前的更差或不变。所以我们要按从大到小排序,我们发现left(1,n)/(right(i)*left(i))中,left(1,n)是不变的,我们把这个公式*1/(left(1,n)),公式就变成right[i]*left[i],但因为乘了一个倒数,所以符号变了,所以要按 right[i]*left[i] 的值从小到大排序。然后模拟一次就可以了。
因为数很大(对于100%的数据,有1《n《1000, 0<a,b<10000)所以要用高精度乘和高精度除。
由此引出大整数的乘除法:
大整数的乘法:
Int a[1000],b[1000],result[1000]
现在要计算:
a[0]a[1]a[2]a[3]a[4]……a[999]
X b[0]b[1]b[2]b[3]b[4]……b[999]
=?
首先低位对齐,此处设定的是 a[0]为高位,则可能数组 a 并没有存满。
a[0]a[1]a[2]a[3]a[4]……a[i]
X b[j]
Result[n-1]+=a[i]*b[j]%10000
Result[n-2]+= a[i]*b[j]/10000 进位
……
循环
2 大整数的除法:
现在要计算(大整数除以一个简单的整数):
bi )a[0]a[1]a[2]a[3]a[4]……a[999]
判定:a[0]<bi?
Yes: shang[i] = (a[0]*10000+a[1])/bi shang[i+1]=(( a[0]*10000+a[1])%bi)*10000+a[2])/bi
No: shang[i] = a[0]/bi shang[i+1]=((a[0]%bi)*10000+a[1])/bi
循环,注意 a[0]=bi 时候的情况
【引出参考代码】:.python
[n],*k=([int(x) for x in line.split()]for line in open('4302.in'))
c=[[0,0]]*n
for i in range(1,n+1):
c[i-1]=[k[i][0]*k[i][1],i]
c.sort()
king=k[0][0]
MAX=king//k[c[0][1]][1]
for x in range(0,n):
t=king//k[c[x][1]][1]
king=king*k[c[x][1]][0]
if t>MAX:
MAX=t
open('4302.out','w').write('{:d}\n'.format(MAX))
学生提问,是否听懂,以及讲解。
完。
转载于:https://www.cnblogs.com/yexu200241/p/3720877.html
国王的游戏(华东师范大学-信息学竞赛学教案)相关推荐
- 信息奥赛c语言是什么意思,信息学竞赛是什么?信息学竞赛学什么,有什么作用?...
家长在小学时,会让孩子学习很多的兴趣班,比如钢琴.美术.体育,同时也参加了不少比赛以证明孩子的优秀.在2018年"禁赛令"之后各类学科.奥数比赛逐渐降温,取而代之的大火是另一种兴趣 ...
- 拼音魔法-华东师范大学程序设计竞赛-ecnu3256
拼音魔法click here 模拟题,轻声判断v转换为u还是ü:1至4升是一样的解法.先判断有无a o e, 若有,替换为带声调的:若无,继续判断有无i u,若有,替换:若无,继续判断有无v,若有,替 ...
- 2018年华东师范大学数学竞赛试题
https://wenku.baidu.com/view/ad61b24326284b73f242336c1eb91a37f11132d6 或者: http://math.funbbs.me/view ...
- 小学信息学竞赛计算机基础知识,信息学竞赛怎么快速入门
一说到信息学竞赛学习很多人感觉很难,其实感觉难是对信息学竞赛的不了解,那么信息学竞赛是一种什么样的竞赛呢? 一.什么是信息学竞赛 信息学竞赛是在青少年中普及计算机知识.推广计算机应用的一项学科竞赛,分 ...
- {分享}《Matrix67:信息学竞赛中可能有用的概率学知识》——Monty Hall问题
嗯,能算半篇水文,写得不好请见谅. <信息学竞赛中可能有用的概率学知识> 内容太多了不打算都写,只写一个刚刚搞懂的问题--<Monty Hall问题>. 对于这个问题,十年来涌 ...
- 【2012年中山纪念中学信息学竞赛初一选拔赛一】纪中游戏(d)
[2012年中山纪念中学信息学竞赛初一选拔赛一]纪中游戏(d) (File IO): input:d.in output:d.out 时间限制: 1000 ms 空间限制: 262144 KB [题目 ...
- 奥林匹克计算机怎么学,信息学竞赛金牌教练带你C++入门!
课程 信息 上课时间 18:30 (2.5h/次) 针对对象 小学四.五年级为主 授课老师 CCF金牌教练,专业信息学竞赛教练,深受广大学子欢迎 报名方式:176 1113 4175 编程有哪些竞赛? ...
- 华师大计算机科学与技术考研科目,2020华东师范大学计算机与软件工程考研初试科目、参考书目、招生人数汇总...
原标题:2020华东师范大学计算机与软件工程考研初试科目.参考书目.招生人数汇总 本文将由新祥旭徐老师全方位的对华东师范大学计算机专业考研进行解析,主要有以下几个板块:学院介绍,专业情况介绍,2019 ...
- 2016年中山市信息学竞赛暨全国信息学联赛成绩表(普及组)
这一次比赛的成绩出来啦,考的还是不错的,至少近复赛了.加油! 2016年中山市信息学竞赛暨全国信息学联赛成绩表(普及组) 序号 姓名 性别 学校 年级 参赛语种 指导教师 成绩 32 徐熠伟 男 ...
最新文章
- HttpClient之GET请求
- phoenix 开发API系列 目录
- ExtJs学习笔记(21)-使用XTemplate结合WCF显示数据
- 进阶篇:6)样机制作与验证
- 解读自监督学习(Self-Supervised Learning)几篇相关paper -
- 中职计算机网络技术教学大纲,计算机网络技术课程教学大纲
- ubuntu源码安装tensorflow
- 百度离线地图瓦片下载器
- 【UVA No. 12676】转换哈夫曼编码 Inverting Huffman
- 5年从点点点到测开,写给即将进入或者正在做测试的你...
- cogs2398 切糕 最小割
- xpath定位元素详解
- 华为服务器ip从bios哪里修改,服务器bios设置ip
- 嵌入式Linux工程师的成长经历
- 租用国内的云主机的话,阿里云和盛大云,哪个更好?
- 解析数组里面包含数组的json格式的数据代码
- android 和风图标字体移植显示墨迹天气图标
- 如何在Android 2.2(Froyo)上创建闹钟快捷方式
- ggplot报错 stat_count() can only have an x or y aesthetic
- Unity中行星和恒星的旋转——Rotate和RotateAround
热门文章
- 引用类型传递参数的特殊情况(string)
- ETL工具 kettle问题
- 网站安全之nginx的配置创建访问网站密码认证
- 使用mybatis generator 生成annotation形式的mapper
- Linux基础命令介绍
- angular HttpClient 配置
- Insertion Sort List,Merge Two Sorted Lists,Sort List
- Cisco 综合交换实验Dynamips.Net实现方法
- android 使用photoshop 裁剪图片
- 【Redis】3. Redis数据类型 Hash