传送

最大值最小什么的一看就是二分了qwq

然鹅并不知道怎么检查,所以我们换个思路

我们要求出最小的最大值,这肯定和大臣的排列有关,会不会有什么规律?

先看看只有两个大臣的情况

排列:1 2,ans1=max{a0/b1,a0a1/b2}

排列:2 1,ans2=max{a0/b2,a0a2/b1}

显然a0/b1<a0a2/b1,a0/b2<a0a1/b2,所以最大值取决于a0a1/b2和a0a2/b1

为了让最大值最小,当ans1>ans2的时候,我们就会调换1,2的顺序

所以就是a0a1/b2>a0a2/b1,也就是a1b1>a2b2的时候就会调换。

综上可得按照a*b从小到大排序

其实这个题的难点不在排序思路,在于高精。

a,b<10000,n<1000,最坏情况ans=100001000,爽

建议结合代码食用

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll read()
{
char ch=getchar();
ll x=;bool f=;
while(ch<''||ch>'')
{
if(ch=='-')f=;
ch=getchar();
}
while(ch>=''&&ch<='')
{
x=(x<<)+(x<<)+(ch^);
ch=getchar();
}
return f?-x:x;
}
struct rr
{
ll a,b;
}ren[];
ll n,aa,bb,sa[],now[],ma[],lenm=,lens=,lenn=;//sa记录大臣们左手上的数的乘积,now记录当前大臣的金币,ma记录最大值
bool cmp(rr t,rr w)
{
return t.a*t.b<w.a*w.b;
}
//以下是高精
void cheng(ll k)//高精乘
{
sa[]*=k;
for(int i=;i<=lens;i++)
{
sa[i]=sa[i-]/+sa[i]*k;
sa[i-]%=;
}
while(sa[lens]>=)
{
lens++;
sa[lens]=sa[lens-]/;
sa[lens-]%=;
}
}
void chu(ll k)
{
int j=,x=;
memset(now,,sizeof(now));
for(int i=lens;i>=;i--)
{
j++;
x=x*+sa[i];
now[j]=x/k;
x=x-now[j]*k;
}
for(int i=;i<=j/;i++)//由于高精除单精是从第一位表示高位,所以要把now反过来,注意是i<=j/2,不是i<=j
{
int tmp=now[i];
now[i]=now[j-i+];
now[j-i+]=tmp;
}
while(now[j]==&&j>)
j--;
lenn=j;
}
void max_()//进行比较
{
if(lenn>lenm)
{
for(int i=lenn;i>=;i--)
ma[i]=now[i];
lenm=lenn;//别漏了
return ;
}
if(lenn<lenm) return ;
for(int i=lenn;i>=;i--)
{
if(now[i]<ma[i])
break;
if(now[i]>ma[i])//找到第一位比ma对应位小的
{
for(int j=i;j>=;j--)
{
ma[j]=now[j];
}
return ;
}
}
return ;
}
int main()
{
sa[]=;
n=read();ren[].a=read();ren[].b=read();
for(int i=;i<=n;i++)
ren[i].a=read(),ren[i].b=read();
sort(ren+,ren++n,cmp);
for(int i=;i<=n;i++)
{
cheng(ren[i-].a);
chu(ren[i].b);
max_();
}
for(int i=lenm;i>=;i--)
printf("%lld",ma[i]);
}

P1080国王游戏的更多相关文章

  1. 【题解】洛谷 P1080 国王游戏

    目录 题目 思路 \(Code\) 题目 P1080 国王游戏 思路 贪心+高精度.按\(a \times b\)从小到大排序就可以了. \(Code\) #include<bits/stdc+ ...

  2. P1080 国王游戏 (等待高精度AC)

    P1080 国王游戏 题解 贪心策略:按照大臣左右手数字乘积从小到大排序 假设我们已经把大臣排了一个顺序 假定在这个顺序下我们可以保证  得到奖赏最多的大臣所得奖赏最少 那么我们一旦交换任意两个大臣, ...

  3. 【流水调度问题】【邻项交换对比】【Johnson法则】洛谷P1080国王游戏/P1248加工生产调度/P2123皇后游戏/P1541爬山

    前提说明,因为我比较菜,关于理论性的证明大部分是搬来其他大佬的,相应地方有注明. 我自己写的部分换颜色来便于区分. 邻项交换对比是求一定条件下的最优排序的思想(个人理解).这部分最近做了一些题,就一起 ...

  4. Luogu P1080国王游戏(贪心)

    国王游戏 题目链接:国王游戏 ps:题目数据说明了要写高精度. 这个题的答案是\(a.l * a.r < b.l * b.r\)按照这个进行排序 题解中大部分只是如何证明排序是: \(a.l * ...

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

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

  6. [贪心][高精]P1080 国王游戏(整合)

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

  7. P1080 国王游戏 贪心 高精度

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

  8. 洛谷 P1080 国王游戏

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

  9. luogu P1080 国王游戏

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

  10. 洛谷—— P1080 国王游戏

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

随机推荐

  1. HDU 3466 Proud Merchants 带有限制的01背包问题

    HDU 3466 Proud Merchants 带有限制的01背包问题 题意 最近,伊萨去了一个古老的国家.在这么长的时间里,它是世界上最富有.最强大的王国.因此,即使他们的国家不再那么富有,这个国 ...

  2. nginx重新编译安装upload模块

    由于php处理上传会出现超时,并且显示上传进度官方php不支持nginx+php,所以决定让nginx自己处理上传,我本地环境是mac上已经安装过nginx1.8.0,安装方式为brew,所以需要重新 ...

  3. some problem

    CF1257F Make Them Similar $solution:$ 折半搜索后考虑如何维护两个数组的和,可以将 $A$ 中每个数减 $A_1$ ,$B$ 中每个数被减 $B_1$ ,$map$ ...

  4. mongodb启动报错,child process failed, exited with error number 1

    error: child process failed, exited with error number 1 第一次安装mongodb,随后启动一般不会出现上面的错误,出现这种错误的原因一般是mon ...

  5. 源码编译Redis Desktop Manager | 懒人屋

    原文:源码编译Redis Desktop Manager | 懒人屋 源码编译Redis Desktop Manager  2.3k  字    10  分钟    2019-10-10 文章背景 本 ...

  6. Apache 配置外网站点

    基于域名,一般是对外网站 www.etiantian.org/var/www/html/www blog.etiantian.org /var/www/html/blog bbs.tiantian.o ...

  7. modinfo - 显示当前内核模块信息

    总览 modinfo [ options ] <module_file> 描述 modinfo 工具软件用来对内核模块的目标文件 module_file 进行测试并打印输出相关信息. 选项 ...

  8. Cacti+nagios 整合监控部署文档

    目录 Cacti+nagios监控部署步骤... 2 一.Cacti安装... 2 1需要安装的依赖软件包:... 2 2安装rrdtool 2 3启动数据库和httpd服务... 3 4将serve ...

  9. Linux学习--第一天--Unix 、 Linux 发展史,Linux应用领域

    UNIX发展史 肯·汤姆森开发出linux. 肯·汤姆森的同事丹尼斯·里奇在1971年开发了C语言. 操作系统 公司 硬件平台 AIX IBM PowerPC HP-UX HP PA-RISC Sol ...

  10. VB学习一

    一.基础函数 CStr() 函数转化表达式为一个字符串 Trim() 移除字符串两侧的空白字符串或者其他预定义字符 成功:返回删除后的字符串 失败:返回空字符串 VBA.Mid(string,star ...