题目描述

恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏。首先,他让每个大臣在左、右手上面分别写下一个整数,国王自己也在左、右手上各写一个整数。然后,让这 n 位大臣排成一排,国王站在队伍的最前面。排好队后,所有的大臣都会获得国王奖赏的若干金币,每位大臣获得的金币数分别是:排在该大臣前面的所有人的左手上的数的乘积除以他自己右手上的数,然后向下取整得到的结果。

国王不希望某一个大臣获得特别多的奖赏,所以他想请你帮他重新安排一下队伍的顺序,使得获得奖赏最多的大臣,所获奖赏尽可能的少。注意,国王的位置始终在队伍的最前面。

输入输出格式

输入格式:

第一行包含一个整数 n,表示大臣的人数。

第二行包含两个整数 a和 b,之间用一个空格隔开,分别表示国王左手和右手上的整数。

接下来 n 行,每行包含两个整数 a 和 b,之间用一个空格隔开,分别表示每个大臣左手和右手上的整数。

输出格式:

输出只有一行,包含一个整数,表示重新排列后的队伍中获奖赏最多的大臣所获得的金币数。

输入输出样例

输入样例#1:


1 1 
2 3 
7 4 
4 6 

输出样例#1:

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。

【数据范围】

对于 20%的数据,有 1≤ n≤ 10,0 < a、b < 8;

对于 40%的数据,有 1≤ n≤20,0 < a、b < 8;

对于 60%的数据,有 1≤ n≤100;

对于 60%的数据,保证答案不超过 10^9;

对于 100%的数据,有 1 ≤ n ≤1,000,0 < a、b < 10000。

思路:高精度!

源代码

#include<cstdio>
#include<iostream>
using namespace std;
int n;
int len=1;//表示高精度中字符串的长度
int a[100010],b[100010],c[100010],g[1000010];//a表示乘积,b表示左手,c表示右手
void multiplicative(int x)
{int i;for(i=1;i<=len;i++)g[i]*=b[x];for(i=1;i<=len;i++){g[i+1]+=(g[i]/10);//进位g[i]%=10;}len++;while(g[len]>9)//>9的位置上进位{g[len+1]+=(g[len]/10);g[len]%=10;len++;}if(g[len]==0)//删前导0len--;
}
void division()//高精除
{int i;for(i=len;i>=1;i--){g[i-1]+=((g[i]%c[n])*10);//将前一位%第n位大臣右手给下一位g[i]/=c[n];}while(g[len]==0)//处理首位len--;if(len==0)//防止减完cout<<1<<endl;}
void quick_sort(int l,int r)
{int i,j,mid;int temp;i=l;j=r;mid=a[(l+r)/2];while(i<=j){while(a[i]<mid) i++;while(a[j]>mid) j--;if(i<=j){temp=a[i],a[i]=a[j],a[j]=temp;temp=b[i],b[i]=b[j],b[j]=temp;temp=c[i],c[i]=a[j],c[j]=temp;i++;j--;}}if(l<j) quick_sort(l,j);if(i<r) quick_sort(i,r);
}int main()
{int i;cin>>n;cin>>b[0]>>c[0];for(i=1;i<=n;i++){cin>>b[i]>>c[i];//输入每人左右手的金币数a[i]=b[i]*c[i];//两手金币数相乘}quick_sort(1,n);//从第一位大臣处开始排序g[1]=b[0];//从国王左手开始乘,赋初值for(i=1;i<n;i++) //所有左手的数字相乘multiplicative(i);division();//最后一个得到的最多,所以由n-1个左手乘积/第n个右手乘积for(i=len;i>=1;i--)//倒序输出cout<<g[i];return 0;
}

国王游戏(洛谷-P1080)相关推荐

  1. 洛谷 P1080 国王游戏

    这是一道贪心题,贪心的策略是将大臣们按左右手金币的乘积升序排列,具体证明过程可以参见洛谷大佬的题解,这里就不再赘述了. 因为本菜鸡之前没有接触过高精度运算,对C++的运算符重载也不太熟练,所以正好借此 ...

  2. 洛谷P1080 国王游戏(贪心)

    国王游戏 题目描述 恰逢 HHH 国国庆,国王邀请 nnn 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 nnn 位大臣排成 ...

  3. 广度优先搜索——好奇怪的游戏(洛谷 P1747)

    题目选自洛谷P1747 简单的广搜模板题,4+8 = 12个方向进行bfs,目的地是(1,1) 每次查看队首是否到达,若到达(1,1) 则返回队首步长即可~ 需要注意的是,马走日和像走田的位置计算 i ...

  4. 模拟——扫雷游戏(洛谷 P2670)

    模拟算法指的是让程序完整地按照题目叙述的方式运行得到答案! 此题选自洛谷P2670 也是一道简单模拟的题,没有必要列举出8个if语句逐一判断8个方向, 只需要用一个二维数组来保存8个方向即可. 需要注 ...

  5. 洛谷P1080 国王游戏 贪心+高精度

    https://www.luogu.org/problem/P1080 题目描述 恰逢 HH H国国庆,国王邀请n nn 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王 ...

  6. 洛谷P1080 国王游戏

    题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排成一排,国王站在队伍的最 ...

  7. [NOIP2012] 提高组 洛谷P1080 国王游戏

    题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右 手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排 成一排,国王站在队伍 ...

  8. 洛谷P1080 [NOIP2012 提高组] 国王游戏(贪心,高精度)

    [题目描述] 恰逢HHH国国庆,国王邀请nnn位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这nnn位大臣排成一排,国王站在队伍 ...

  9. NOIP 提高组 2012 / 洛谷P1080 国王游戏 题解

    题面: 略 简易题解: 假设第iii位大臣左手为LiL_{i}Li​, 右手的数为R_{i} 并且我们有两位大臣iii,jjj,考虑他们的相对位置 (PPP 是 iii , jjj 之前的左手数值累乘 ...

最新文章

  1. Stern-Brocot树
  2. mate 10android o主题,Mate10不仅硬件强,还有安卓8.0
  3. python京东抢购脚本_五个月抢京东抢茅台心得
  4. 岳翔南京大学计算机,基于组合IIS路径抽取的组合线性混成系统有界可达性分析-中国科学.PDF...
  5. 关于 Mac OS X 内核技术来源
  6. 用户权限管理shiro
  7. C++内存和进程,线程学习补充(内存泄漏,信号量)
  8. Android中Webview自适应屏幕
  9. Microsoft.NET Pet Shop 4.0各个模块之间的联系
  10. 孙鑫-MFC笔记一--Windows程序内部运行机制
  11. 谷粒商城:12.仓储服务 — 仓库管理
  12. table 样式美化
  13. Icon图标格式(用于生成*.ico图标)
  14. IDEA中一直indexing问题
  15. Xrm.Utility.openEntityForm的使用
  16. 长城会十周年:文厨用故事讲述它的“前世今生”
  17. PaaS,BLT模型中的一部分
  18. android 银联插件,Android版添加phonegap-银联支付插件教程
  19. c++ cheat sheet
  20. 用Beautiful Soup进行屏幕抓取

热门文章

  1. 重磅盘点!2018年更受欢迎的技术干货,来来回回也就看了几十遍吧
  2. 官方确认:新增一所“双一流”大学
  3. 深入了解Zookeeper核心原理
  4. 两次被裁之后,我终于解决了数据库缓存一致性问题
  5. jeecg之弹窗插件lhgdialog小结
  6. 进程和线程的关系与区别是什么?如何创建多线程?
  7. 用sqlserver手动写个split(字符分割)
  8. webpack钩子调用shell笔记
  9. 数据导入导出 、 表记录基本操作 、 查询及匹配条件 、 多表查询 、
  10. ASP.NET 5 入门 (3) – Logging