P1080国王游戏
最大值最小什么的一看就是二分了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国王游戏的更多相关文章
- 【题解】洛谷 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 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整 ...
随机推荐
- P3951小凯的疑惑
这是2017年提高组的第一题,是一个小学奥数题?听说很多大佬爆零了,我AC了,,, 这个题首先给出两个素数,问取任意个这两个素数之和不可以达到的最大的数是多少?拿到这个题首先很蒙,于是试了试样例,并没 ...
- 补充[BNDSOJ]小p的数列
强烈安利gjz的题解,看一遍即可ac:传送门 进入重点: 为啥$to=(dp[i][k][ii]+dp[k+1][j][jj])/2$ 位运算重点:a&b=a+b-a|b 为啥呢? 例子: a ...
- linux中文件IO
一. linux常用文件IO接口 1.1. 文件描述符 1.1.1. 文件描述符的本质是一个数字,这个数字本质上是进程表中文件描述符表的一个表项,进程通过文件描述符作为index去索引查表得到文件表指 ...
- docker环境下分析zookeeper观察者角色
问题引入 zookeeper新引入的角色observer是不参与投票的,通过增加observer节点,可以在提高zk系统读吞吐量时,不影响写吞吐量. 那么问题来了 Zookeeper系统节点如果超过半 ...
- angular 示例项目
cnpm install 环境安装好后,快速创建一个新项目,如在D盘下新建一个angularProject项目,只要在本地目录下 ng new angularProject angularProjec ...
- C#设计模式:访问者模式(Vistor Pattern)
一,访问者模式是用来封装一些施加于某种数据结构之上的操作.它使得可以在不改变元素本身的前提下增加作用于这些元素的新操作,访问者模式的目的是把操作从数据结构中分离出来. 二,代码 using Syste ...
- es7.2版本安装ik分词
(一)到官网下载https://github.com/medcl/elasticsearch-analysis-ik对应版本的ik(直接下载releases版本,避免maven打包!!!如果不是这个版 ...
- js防抖和节流优化浏览器滚动条滚动到最下面时加载更多数据
防抖和节流,主要是用来防止过于平凡的执行某个操作,如浏览器窗口变化执行某个操作,监听某个input输入框keyup变化,瀑布流布局时Y轴滚动,图片加载. js函数的防抖 经过一段事件才执行某个操作,如 ...
- 03javascript01
1.javascript语法体系 1)EMCA基础语法(统一) 2)BOM编程(不统一) 3)DOM编程(不统一) 1.1 javascript使用 <!DOCTYPE html> < ...
- larval 使用redis做缓存
1.存redis 使用setex命令可以同时设置数据和保存时间 $data = [ 'name'=>zhangsan, 'age' => 28, 'sex' => 1 ]; Redi ...