P1080 国王游戏
题意:
让n 位大臣排成一排,国王站在队伍的最前面。
排好队后,所有的大臣都会获得国王奖赏的若干金币,
每位大臣获得的金币数分别是:排在该大臣前面的所有人的左手上的数的乘积除以他自己右手上的数,然后向下取整得到的结果。
求一种排列顺序,使得得到金币最大的大臣得到的金币最少
输出最小值
先举个简单的锤子
n=2
有两种情况
| 左手 | 右手 | |
| 国王 | $a_0$ | $b_0$ |
| 大臣1 | $a_1$ | $b_1$ |
| 大臣2 | $a_2$ | $b_2$ |
可以计算得出$ans_1=max(\frac{a_0}{b_1},\frac{a_0*a_1}{b_2})$
| 左手 | 右手 | |
| 国王 | $a_0$ | $b_0$ |
| 大臣1 | $a_2$ | $b_2$ |
| 大臣2 | $a_1$ | $b_1$ |
可以计算得出$ans_2=max(\frac{a_0}{b_2},\frac{a_0*a_2}{b_1})$
对比两种情况的答案
$ans_1=max(\frac{a_0}{b_1},\frac{a_0*a_1}{b_2})$
$ans_2=max(\frac{a_0}{b_2},\frac{a_0*a_2}{b_1})$
分别设$k_1,k_2,k_3,k_4$ 对应代表上边的值
$ans_1=max(k_1,k_2)$
$ans_2=max(k_3,k_4)$
分母相同,分子大的大
因此
$k_2>k_3$
$k_4>k_1$
不妨设$ans_1<ans_2$
即$k_2<k_4$
也就是$\frac{a_0*a_1}{b_2}<\frac{a_0*a_2}{b_1}$
移个项,可得出
$a_1*b_1<a_2*b_2$
所以,当 $a_1*b_1<a_2*b_2$时,$ans_1<ans_2$
所以为了求出ans最小值
按l*r进行排序
注意要用高精!
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cctype>
#include<algorithm>
using namespace std;
#define int long long
#define olinr return
#define _ 0
#define love_nmr 0
#define DB double
struct zhi_zhang_gao_jing_qu_si
{
int w[];
int len;
int &operator [] (int a)
{
return w[a];
}
zhi_zhang_gao_jing_qu_si()
{
memset(w,,sizeof w);
len=;
w[]=;
}
friend zhi_zhang_gao_jing_qu_si operator * (zhi_zhang_gao_jing_qu_si &a,int b)
{
zhi_zhang_gao_jing_qu_si t;
t.w[]=;
t.len=a.len+;
for(int i=;i<=t.len;i++)
{
t.w[i]+=a.w[i]*b;
t.w[i+]=t.w[i]/;
t.w[i]%=;
}
while(t.len>&&t.w[t.len]==) t.len--;
return t;
}
friend zhi_zhang_gao_jing_qu_si operator / (const zhi_zhang_gao_jing_qu_si &a,int b)
{
zhi_zhang_gao_jing_qu_si t;
t.len=a.len;
int x=;
for(int i=t.len;i>=;i--)
{
t.w[i]=(x*+a.w[i])/b;
x=(x*+a.w[i])%b;
}
while(t.len>&&t.w[t.len]==) t.len--;
return t;
}
friend bool operator < (const zhi_zhang_gao_jing_qu_si &a,const zhi_zhang_gao_jing_qu_si &b)
{
if(a.len>b.len) return false;
if(a.len<b.len) return true;
for(int i=a.len;i>=;i--)
{
if(a.w[i]<b.w[i]) return true;
if(a.w[i]>b.w[i]) return false;
}
return true;
}
void out()
{
for(int i=len;i>=;i--)
putchar(w[i]+'');
}
};
struct node
{
int l,r;
friend bool operator < (const node &a,const node &b)
{
return a.l*a.r<b.l*b.r;
}
}p[];
int n;
inline int read()
{
int x=,f=;
char ch=getchar();
while(!isdigit(ch))
{
if(ch=='-')
f=-f;
ch=getchar();
}
while(isdigit(ch))
{
x=(x<<)+(x<<)+(ch^);
ch=getchar();
}
return x*f;
}
signed main()
{
n=read();
n++;
for(int i=;i<=n;i++)
{
p[i].l=read();
p[i].r=read();
}
sort(p+,p+n+);
zhi_zhang_gao_jing_qu_si sm;
zhi_zhang_gao_jing_qu_si ans;
for(int i=;i<=n-;i++)
{
sm=sm*p[i].l;
ans=max(ans,sm/p[i+].r);
}
ans.out();
olinr ~~(^_^)+love_nmr;
}
P1080 国王游戏的更多相关文章
- 【题解】洛谷 P1080 国王游戏
目录 题目 思路 \(Code\) 题目 P1080 国王游戏 思路 贪心+高精度.按\(a \times b\)从小到大排序就可以了. \(Code\) #include<bits/stdc+ ...
- P1080 国王游戏 (等待高精度AC)
P1080 国王游戏 题解 贪心策略:按照大臣左右手数字乘积从小到大排序 假设我们已经把大臣排了一个顺序 假定在这个顺序下我们可以保证 得到奖赏最多的大臣所得奖赏最少 那么我们一旦交换任意两个大臣, ...
- 【流水调度问题】【邻项交换对比】【Johnson法则】洛谷P1080国王游戏/P1248加工生产调度/P2123皇后游戏/P1541爬山
前提说明,因为我比较菜,关于理论性的证明大部分是搬来其他大佬的,相应地方有注明. 我自己写的部分换颜色来便于区分. 邻项交换对比是求一定条件下的最优排序的思想(个人理解).这部分最近做了一些题,就一起 ...
- Luogu P1080国王游戏(贪心)
国王游戏 题目链接:国王游戏 ps:题目数据说明了要写高精度. 这个题的答案是\(a.l * a.r < b.l * b.r\)按照这个进行排序 题解中大部分只是如何证明排序是: \(a.l * ...
- [NOIP2012] 提高组 洛谷P1080 国王游戏
题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右 手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排 成一排,国王站在队伍 ...
- [贪心][高精]P1080 国王游戏(整合)
题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排成一排,国王站在队伍的最 ...
- P1080 国王游戏 贪心 高精度
题目描述 恰逢 HH国国庆,国王邀请nn 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 nn 位大臣排成一排,国王站在队伍的 ...
- 洛谷 P1080 国王游戏
题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排成一排,国王站在队伍的最 ...
- luogu P1080 国王游戏
题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排成一排,国王站在队伍的最 ...
- 洛谷—— P1080 国王游戏
https://www.luogu.org/problem/show?pid=1080 题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整 ...
随机推荐
- Oracle OCM提纲
ocm提纲 数据库创建详解 ◆ 通过手动方式创建数据库 环境变量的设置 密码文件的创建过程以及使用情景 Oracle数据库中参数文件的演进过程 参数文件的对比 参数的修改方式介绍 数据库启动过程时的内 ...
- HDLM工具介绍
HDLM提供了以下一些工具,以方便HDLM多路径管理. 1. dlmgetras hdlm信息收集工具,用来收集hdlm相关的各种日志.trace.配置等文件,以方便进行hdlm故障分析. 命令格式 ...
- opencv 美白磨皮人脸检测<转>
1. 简介 这学期的计算机视觉课,我们组的课程项目为“照片自动美化”,其中我负责的模块为人脸检测与自动磨皮.功能为:用户上传一张照片,自动检测并定位出照片中的人脸,将照片中所有的人脸进行“磨皮”处理, ...
- SQL server 2008安装教程
下载SQL server 2008 r2(网上资源很多,这里给出一个:安装) 解压后右键以管理员权限打开set-up 这里可能会出现问题:.net framework 3.5未安装,可以参考 快速安装 ...
- android opencv
最近工作需求:用opencv来先做一个demo.扫描照片进行边缘检测和透视矫正. 之后会加入照片降噪等处理. 请教了一下搞图像的同事.他的提议: 1.绿盟的“黄色照片检测” 用的是动态的opencv库 ...
- ZROI2018普转提day1t4
传送门 分析 就是飞飞侠这道题...... 我们可以将这张图建成好几层,每一层可以向下一层的上下左右无代价移动,而对于每个点如果付b[i][j]的代价就可以走到比它高a[i][j]的层上.我们用这种方 ...
- SPOJ LCMSUM - LCM Sum
题意是求: $\sum_{i = 1}^{n}lcm(i, n)$ $= \sum_{i = 1}^{n}\frac{ni}{gcd(i, n)}$ $= n\sum_{i = 1}^{n}\frac ...
- $this->autoRender = false
动作执行完之后禁止调用render()方法
- apache隐藏入口文件index.php
LoadModule rewrite_module modules/mod_rewrite.so
- 第二篇:MySQL库相关操作
一 系统数据库 information_schema: 虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息.列信息.权限信息.字符信息等performance_schema: MyS ...