https://www.luogu.org/problem/P1080
题目描述 恰逢 HH H国国庆,国王邀请n nn 位大臣来玩一个有奖游戏。首先,他让每个大臣在左、右手上面分别写下一个整数,国王自己也在左、右手上各写一个整数。然后,让这 nnn 位大臣排成一排,国王站在队伍的最前面。排好队后,所有的大臣都会获得国王奖赏的若干金币,每位大臣获得的金币数分别是:排在该大臣前面的所有人的左手上的数的乘积除以他自己右手上的数,然后向下取整得到的结果。
国王不希望某一个大臣获得特别多的奖赏,所以他想请你帮他重新安排一下队伍的顺序,使得获得奖赏最多的大臣,所获奖赏尽可能的少。注意,国王的位置始终在队伍的最前面。
输入格式 第一行包含一个整数n nn,表示大臣的人数。
第二行包含两个整数 aaa和 bbb,之间用一个空格隔开,分别表示国王左手和右手上的整数。
接下来 nn n行,每行包含两个整数a aa 和 bbb,之间用一个空格隔开,分别表示每个大臣左手和右手上的整数。
输出格式 一个整数,表示重新排列后的队伍中获奖赏最多的大臣所获得的金币数。
输入输出样例 输入 #1
复制
3
1 1
2 3
7 4
4 6 输出 #1
复制
2

思路:枚举一下相邻的两个人交换位置的可能的结果,然后作比较易得l∗rl*rl∗r小的应该放在前面。计算答案的时候要用到高精度。手写一个高精∗*∗低精和高精///低精就好了。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;struct node
{ll l,r;bool operator <(const node &a)const{return l*r<a.l*a.r;}
}a[1005];int n,len1=0,len2=0,len3=0;
ll sum[10005],ans[10005],re[10005];//乘法结果 除法结果 最大值void mul(ll x)
{int tmp=0;for(int i=1;i<=len1;i++)sum[i]*=x;for(int i=1;i<=len1;i++){tmp+=sum[i];sum[i]=tmp%10;tmp/=10;}while(tmp!=0){sum[++len1]=tmp%10;tmp/=10;}
}void div(ll x)
{memset(ans,0,sizeof(ans));int tmp=0;len2=len1;for(int i=len1;i>=1;i--){ans[i]=(tmp*10+sum[i])/x;tmp=(tmp*10+sum[i])%x;}while(ans[len2]==0&&len2>1)--len2;
}bool cmp()
{if(len2>len3)return 1;if(len2<len3)return 0;for(int i=len2;i>=1;i--){if(ans[i]>re[i])return 1;if(ans[i]<re[i])return 0;}return 0;
}void fz()
{len3=len2;for(int i=len2;i>=1;i--)re[i]=ans[i];
}int main()
{scanf("%d",&n);int u,v;scanf("%d%d",&u,&v);while(u>0)sum[++len1]=u%10,u/=10;for(int i=0;i<n;i++)scanf("%lld %lld",&a[i].l,&a[i].r);sort(a,a+n);for(int i=0;i<n;i++){div(a[i].r);if(cmp())fz();mul(a[i].l);}for(int i=len3;i>=1;i--)printf("%lld",re[i]);return 0;
}

洛谷P1080 国王游戏 贪心+高精度相关推荐

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

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

  2. 洛谷 P1080 国王游戏

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

  3. P1080 国王游戏(贪心+高精度乘除及大数比较)

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

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

    P1080-国王游戏 啊啊啊,刚才已经写了一次了,但是Edge浏览器不知道为什么卡住了,难受. 好吧,其实是一道可做题,分析得到的贪心策略就是就是将a * b小的放在前面(其他的懒得说了),主要还是要 ...

  5. 洛谷P1080 国王游戏

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

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

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

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

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

  8. CH - 0701 国王游戏(贪心+高精度运算)

    题目链接:点击查看 题目大意:恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排成一 ...

  9. 【题解】P1080 国王游戏(贪心+高精python天下第一)

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

最新文章

  1. XenApp_XenDesktop_7.6实战篇之八:申请及导入许可证
  2. HDOJ2569 ( 彼岸 ) 【递推公式】
  3. python里面的类和对象_Python中类和对象在内存中是如何保存?
  4. matlab GUI 界面暂时关闭和打开关闭请求操作
  5. js const 和 var 的区别
  6. 20155222卢梓杰 《Java程序设计》第1周学习总结
  7. 从感知机到支持向量机—学习笔记
  8. BFS广度优先算法, DFS深度优先算法,Python,队列实现,栈实现
  9. HDU2100 Lovekey【大数+进制】
  10. 英语词汇辨异 —— 同音字
  11. 用SQL语句复制数据表
  12. android自动登录_游戏社区App (三):客户端与服务端的加密处理 和 登录
  13. 【eclipse反编译工具】最好的反编译工具
  14. webservice的接口测试工具
  15. ALLEGRO 任意形状铜皮倒圆角
  16. 软件测试工具有哪些(软件测试常用的工具都有哪些)
  17. 吃我一记咸鱼突刺——使用板载RTC定时开机
  18. vivado配置EMIO(使用vivado配置XDC文件)
  19. 机器学习——支持向量机——硬间隔与支持向量
  20. 【学习笔记·2】FOC

热门文章

  1. ARM JTAG仿真器电路讨论
  2. win打开自带的画图工具
  3. 字节跳动再“进攻”印度市场,口碑本就不尽人意,这次会顺利吗?
  4. TDOA算法综述--(2)--Chan‘s Method
  5. Vue:array的变化侦测
  6. 跨时钟域传输——结绳法(芯动力mooc)
  7. 人像分割技术在手,美颜神器打造不愁
  8. 基于MySQL的电商零售订单数据分析
  9. win10下 frpc的开机自启动
  10. python老师 课时费_学生自学Python去面试,月薪为何仅3K?面试官问题解析!