P1080 国王游戏

题目描述

恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏。首先,他让每个大臣在左、右手上面分别写下一个整数,国王自己也在左、右手上各写一个整数。然后,让这 n 位大臣排成一排,国王站在队伍的最前面。排好队后,所有的大臣都会获得国王奖赏的若干金币,每位大臣获得的金币数分别是:排在该大臣前面的所有人的左手上的数的乘积除以他自己右手上的数,然后向下取整得到的结果。

国王不希望某一个大臣获得特别多的奖赏,所以他想请你帮他重新安排一下队伍的顺序,使得获得奖赏最多的大臣,所获奖赏尽可能的少。注意,国王的位置始终在队伍的最前面。

输入输出格式

输入格式:

第一行包含一个整数 n,表示大臣的人数。

第二行包含两个整数 a和 b,之间用一个空格隔开,分别表示国王左手和右手上的整数。

接下来 n 行,每行包含两个整数 a 和 b,之间用一个空格隔开,分别表示每个大臣左手和右手上的整数。

输出格式:

输出只有一行,包含一个整数,表示重新排列后的队伍中获奖赏最多的大臣所获得的金币数。

输入输出样例

输入样例#1:

3
1 1
2 3
7 4
4 6
输出样例#1:

2

说明

【输入输出样例说明】

按 1、2、3 号大臣这样排列队伍,获得奖赏最多的大臣所获得金币数为 2;

按 1、3、2 这样排列队伍,获得奖赏最多的大臣所获得金币数为 2;

按 2、1、3 这样排列队伍,获得奖赏最多的大臣所获得金币数为 2;

按 2、3、1 这样排列队伍,获得奖赏最多的大臣所获得金币数为 9;

按 3、1、2 这样排列队伍,获得奖赏最多的大臣所获得金币数为 2;

按 3、2、1 这样排列队伍,获得奖赏最多的大臣所获得金币数为 9。

因此,奖赏最多的大臣最少获得 2 个金币,答案输出 2。

【数据范围】

对于 20%的数据,有 1≤ n≤ 10,0 < a、b < 8;

对于 40%的数据,有 1≤ n≤20,0 < a、b < 8;

对于 60%的数据,有 1≤ n≤100;

对于 60%的数据,保证答案不超过 10^9;

对于 100%的数据,有 1 ≤ n ≤1,000,0 < a、b < 10000。

NOIP 2012 提高组 第一天 第二题

/*
贪心
对于第 i个大臣和第 j 个大臣:
如果第 i 个大臣放第 j 个大臣前面对答案的贡献小些,那么第 ii 个大臣就放第 jj 个大臣前面
所以就是使 a[i].x/a[j].y<a[j].x/a[i].y
所以就是a[i].x*a[i].y<a[j].x*a[j].y
重载运算符高精
*/ #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm> #define ll long long
#define N 1007 using namespace std;
int L,R,n;
struct node{
int l,r;
bool operator < (const node &x) const{
return l*r<(x.l*x.r);
}
}a[N]; class Big{ public: int size,num[N<<];
Big(){size=;memset(num,,sizeof num);} Big(int data){
size=;
while(data!=)
{
size++;
num[size]=data%;data/=;
}
} inline void init(int data){
size=;
while(data!=)
{
size++;
num[size]=data%;data/=;
}
} inline void copy(Big A){
int s1=size,s2=A.size;
size=s2;
for(int i=s2;i>=;i--) num[i]=A.num[i];
}
};
Big ans,ans1,num,big; inline ll read()
{
ll x=,f=;char c=getchar();
while(c>''||c<''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
} Big operator + (Big A,Big B)
{
Big c;
int s=max(A.size,B.size);
c.size=s;
for(int i=;i<=s;i++) c.num[i]=A.num[i]+B.num[i];
for(int i=;i<=s;i++)
if(c.num[i]>=)
{
c.num[i+]+=c.num[i]/;
c.num[i]%=;
}
if(c.num[s+]!=) c.size++;
return c;
} Big operator - (Big A,Big B)
{
Big c;
int s=max(A.size,B.size);
c.size=s;
for(int i=;i<=s;i++) c.num[i]=A.num[i]-B.num[i];
for(int i=;i<=s;i++)
if(c.num[i]<)
{
c.num[i+]-=c.num[i]/;
c.num[i]=c.num[i]%;
}
if(c.num[s+]!=) c.size++;
return c;
} ostream & operator << (ostream &os,Big A)
{
int s=A.size;
for(int i=s;i>=;i--) os<<A.num[i];
return os;
} Big operator * (Big A,Big B)
{
Big c;
int s1=A.size,s2=B.size;
for(int i=;i<=s1;i++)
for(int j=;j<=s2;j++)
{
c.num[i+j-]+=A.num[i]*B.num[j];
c.num[i+j]+=c.num[i+j-]/;
c.num[i+j-]%=;
}
c.size=A.size+B.size;
while(c.num[c.size]==) c.size--;
return c;
} Big operator /(Big A,int b)
{
Big c;
int s1=A.size,k;k=s1;
for(int i=s1;i>=;i--)
{
c.num[i]=A.num[i]/b;
if(i!=) A.num[i-]+=(A.num[i]%b*);
A.num[i]/=b;
}
while(k>= && c.num[k]==) k--;c.size=k;
return c;
} bool operator > (Big A,Big B)
{
int s1=A.size,s2=B.size;
if(s1<s2) return ;
if(s1>s2) return ;
for(int i=s1;i>=;i--)
if(A.num[i]<B.num[i]) return ;
else return ;
return ;
} int main()
{
big.init();
n=read();L=read();R=read();
ans.init(L);
for(int i=;i<=n;i++) a[i].l=read(),a[i].r=read();
sort(a+,a+n+);
for(int i=;i<=n-;i++)
{
ans1=ans/a[i].r;
if(ans1>big) big.copy(ans1);
ans1.init(a[i].l);ans=ans*ans1;
}
ans=ans/a[n].r;
if(ans>big) big.copy(ans);
cout<<big<<endl;
return ;
}

国王游戏 2012年NOIP全国联赛提高组(贪心+高精)的更多相关文章

  1. Codevs 1198 国王游戏 2012年NOIP全国联赛提高组

    1198 国王游戏 2012年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 恰逢 H 国国庆,国王邀 ...

  2. 矩阵取数游戏 2007年NOIP全国联赛提高组(dp+高精)

    矩阵取数游戏 2007年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold     题目描述 Description [问题描述]帅帅经常跟 ...

  3. Codevs 1218 疫情控制 2012年NOIP全国联赛提高组

    1218 疫情控制 2012年NOIP全国联赛提高组 时间限制: 2 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description H 国有 n 个城市,这 ...

  4. Codevs 1217 借教室 2012年NOIP全国联赛提高组

    1217 借教室 2012年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 在大学期间,经常需要租借教 ...

  5. 3285 转圈游戏 2013年NOIP全国联赛提高组

    3285 转圈游戏 2013年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond       题目描述 Description n 个小伙伴 ...

  6. 开车旅行 2012年NOIP全国联赛提高组(倍增+set)

    开车旅行 2012年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond     题目描述 Description 小A 和小B决定利用 ...

  7. Codevs 1200 同余方程 2012年NOIP全国联赛提高组

    1200 同余方程 2012年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 求关于 x 同余方程 a ...

  8. 观光公交 2011年NOIP全国联赛提高组(贪心,递推)

    观光公交 2011年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold       题目描述 Description 风景迷人的小城 Y 市 ...

  9. 疫情控制 2012年NOIP全国联赛提高组(二分答案+贪心)

    P1084 疫情控制 题目描述 H 国有 n 个城市,这 n 个城市用 n-1 条双向道路相互连通构成一棵树,1 号城市是首都,也是树中的根节点. H 国的首都爆发了一种危害性极高的传染病.当局为了控 ...

随机推荐

  1. Master of Subgraph

    Problem E. Master of SubgraphYou are given a tree with n nodes. The weight of the i-th node is wi. G ...

  2. Linux下汇编语言学习笔记17 ---

    这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...

  3. view属性大全

  4. 基于cocos2d开发的android小游戏——採花仙

    /*cocos 2d 已经成为了如今移动端游戏开发的强有力的工具,眼下主流游戏中多採用cocos 2d游戏引擎. 我也尝试了一下该引擎.我是用的是cocos2d-android,以后要移植到Cocos ...

  5. 如何使用TFTP客户端工具修复路由器固件

    如何使用TFTP客户端工具修复路由器固件 编号:12083       来自:NetGear       更新日期:2013-10-14       访问数量:24650 NETGEAR无线路由器中, ...

  6. 踩坑录-IDEA编辑器:找不到TomcatService或ApplicationServers----TomcatService使用指南

    一.找不到TomcatService或ApplicationServers Setp1. 检查IDEA版本 检查IDEA版本是否为Ultimate(终极版需要激活),Community(社区版免费无需 ...

  7. win7 多用户远程登录

    win7多用户远程登录 远程桌面服务使局域网(LAN)上的计算机可以连接到服务器(也称为远程计算机)并运行位于服务器上的程序.这可以只需要在1台机器上安装应用程序,其他机器共享使用.远程桌面连接使用远 ...

  8. 012 router password

    Press RETURN to get started!       Router>en Router#config t Enter configuration commands, one pe ...

  9. (6)文本挖掘(三)——文本特征TFIDF权重计算及文本向量空间VSM表示

    建立文本数据数学描写叙述的过程分为三个步骤:文本预处理.建立向量空间模型和优化文本向量. 文本预处理主要採用分词.停用词过滤等技术将原始的文本字符串转化为词条串或者特点的符号串.文本预处理之后,每个文 ...

  10. yarn之安装依赖包

    安装依赖关系 yarn install用于安装项目的所有依赖项.依赖关系从您的项目package.json文件中检索,并存储在yarn.lock文件中. 开发包时,安装依赖关系最常见的是在 您刚刚检出 ...