Luogu P1080 [NOIP2012]国王游戏
题目
按\(a_i*b_i\)升序排序即可。
证明考虑交换法。
对于排序后相邻的两个人\(i,j(a_ib_i\le a_jb_j)\),设前面的总的积为\(s\),则当前答案为\(\max(\frac s{b_i},\frac{sa_i}{b_j})\)。
交换两人之后的答案为\(\max(\frac s{b_j},\frac{sa_j}{b_i})\)。
我们知道,显然\(\frac{sa_i}{b_j}>\frac s{b_j},\frac{sa_j}{b_i}>\frac s{b_i}\),所以只需要比后面的大小即可。
交叉相乘,显然交换后的答案\(sa_jb_j\)大于交换前的答案\(sa_ib_i\)。
拿高精加代码量的出题人怕不是脑子有坑。
#include<bits/stdc++.h>
using namespace std;
struct BIGNUM
{
int a[100001];
BIGNUM()
{
memset(a,0,100001),a[0]=1;
}
BIGNUM operator=(string s)
{
a[0]=s.length();
for(int i=1;i<=a[0];i++)
a[i]=s[a[0]-i]-'0';
return *this;
}
BIGNUM operator=(int n)
{
char x[100001];
string s;
sprintf(x,"%d",n);
s=x;
*this=s;
return *this;
}
BIGNUM (int n)
{
*this=n;
}
BIGNUM (string s)
{
*this=s;
}
BIGNUM operator*(BIGNUM b)
{
BIGNUM c;
for(int i=1;i<=a[0];i++)
for(int j=1;j<=b.a[0];j++)
c.a[i+j-1]+=a[i]*b.a[j],c.a[i+j]+=c.a[i+j-1]/10,c.a[i+j-1]%=10;
c.a[0]=a[0]+b.a[0]-1;
if(c.a[c.a[0]+1])
c.a[0]++;
return c;
}
BIGNUM operator/(int x)
{
BIGNUM b;
b.a[0]=a[0];
int tmp=0;
for (int i=a[0];i;i--)
{
tmp=tmp*10+a[i];
b.a[i]=tmp/x;
tmp%=x;
}
while(!b.a[b.a[0]]&&b.a[0]>1)
b.a[0]--;
return b;
}
bool operator<(BIGNUM b)
{
if(a[0]!=b.a[0])
return a[0]<b.a[0];
for(int i=a[0];i;i--)
if(a[i]!=b.a[i])
return a[i]<b.a[i];
return false;
}
};
ostream& operator <<(ostream &out,BIGNUM &x)
{
for(int i=x.a[0];i;i--)
cout<<x.a[i];
return out;
}
struct Lovelive
{
int x,y;
long long z;
}a[100001];
bool cmp(Lovelive a,Lovelive b)
{
return a.z<b.z;
}
int n;
int main()
{
scanf("%d",&n);
for(int i=0;i<=n;i++)
scanf("%d%d",&a[i].x,&a[i].y),a[i].z=a[i].x*a[i].y;
sort(a+1,a+n+1,cmp);
BIGNUM ans=1,tmp,k=1;
for(int i=1;i<=n;i++)
{
k=k*a[i-1].x;
tmp=k/a[i].y;
ans=ans<tmp? tmp:ans;
}
cout<<ans;
return 0;
}
Luogu P1080 [NOIP2012]国王游戏的更多相关文章
- 洛谷P1080(NOIP2012)国王游戏——贪心排序与高精度
题目:https://www.luogu.org/problemnew/show/P1080 排序方法的确定,只需任取两个人,通过比较与推导,可以得出ai*bi小的人排在前面: 高精度写的时候犯了些细 ...
- 继续写高精!noip2012国王游戏。。。
国王游戏 题目描述: 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排成一排,国王 ...
- [noip2012]国王游戏<贪心+高精度>
题目链接: https://vijos.org/p/1779 https://www.luogu.org/problem/show?pid=1080 http://codevs.cn/problem/ ...
- NOIP2012 国王游戏
2国王游戏 (game.cpp/c/pas) [问题描述] 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数 ...
- NOIP2012国王游戏
题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右 手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排 成一排,国王站在 ...
- NOIP2012国王游戏(60分题解)
题目描述 恰逢 H国国庆,国王邀请n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排成一排,国王站在队伍的最前面 ...
- 【题解】洛谷P1080 [NOIP2012TG] 国王游戏(贪心+高精度)
次元传送门::洛谷P1080 思路 我们模拟一下只有两个大臣的时候发现 当a1∗b1<a2∗b2是ans1<ans2 所以我们对所有大臣关于左右手之积进行排序 得到最多钱的大臣就是 ...
- 洛谷【P1080】国王游戏
我对贪心的理解:https://www.cnblogs.com/AKMer/p/9776293.html 题目传送门:https://www.luogu.org/problemnew/show/P10 ...
- [NOIP2012]国王游戏 题解
题目大意: n个人排成一排,排头固定,其他可以变.每一个人左右手都有一个整数,一个人的分数为他所有前面的人左手上的数的乘积除以他右手上的数(向下取整),求在整列中最大分数的最小值. 思路: 首先,一切 ...
随机推荐
- jquery isDefaultPrevented()方法 语法
jquery isDefaultPrevented()方法 语法 作用:isDefaultPrevented() 方法返回指定的 event 对象上是否调用了 preventDefault() 方法. ...
- Java多线程和并发(八),synchronized底层原理
目录 1.对象头(Mark Word) 2.对象自带的锁(Monitor) 3.自旋锁和自适应自旋锁 4.偏向锁 5.轻量级锁 6.偏向锁,轻量级锁,重量级锁联系 八.synchronized底层原理 ...
- [HG]走夜路 题解
前言 整个机房就我一个人在想动态规划. 想了半天发现一堆性质,结果由于DP中出现折线挂了. 题目描述 某NOIP普及组原题加强版. \(Jim\) 非常怕黑,他有一个手电筒,设手电筒的电量上限为 \( ...
- Mac安装ipython与jupyter
Python从Python发展而来,更倾向于科学计算.互联网数据分析更喜欢用. 首先切换root用户: sudo su - pip3自动安装ipython yuchaodeMacBook-Pro:~ ...
- Why are dashes preferred for CSS selectors / HTML attributes?
Why are dashes preferred for CSS selectors / HTML attributes? I use dashes because I don't have to h ...
- Android-Universal-Image-Loader的缓存处理机制与使用 LruCache 缓存图片
讲到缓存,平时流水线上的码农一定觉得这是一个高大上的东西.看过网上各种讲缓存原理的文章,总感觉那些文章讲的就是玩具,能用吗?这次我将带你一起看过UIL这个国内外大牛都追捧的图片缓存类库的缓存处理机制. ...
- 自定义Chrome的console(样式、打印图片、开关)
1.常用console类型 console.log() 常规打印 console.warn() 打印警告信息 console.error() 打印错误信息 console.time() 和 conso ...
- Emacs常用命令快速参考
原文地址 Emacs常用命令的汇总,来自Emacs参考卡片 注意:以下命令中标注的按键,大写的C代表Control,在键盘上通常是Ctrl键,而M代表Meta,在键盘上通常是Alt键,S则代表Shif ...
- 代码实现:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
import java.util.ArrayList; import java.util.List; import java.util.Scanner; //有n个人围成一圈,顺序排号.从第一个人开始 ...
- kernel function
下面这张图位于第一.二象限内.我们关注红色的门,以及“北京四合院”这几个字下面的紫色的字母.我们把红色的门上的点看成是“+”数据,紫色字母上的点看成是“-”数据,它们的横.纵坐标是两个特征.显然,在这 ...