题目大意:

有一些数对,每个数对的得分为它之前所有数对的左侧数之乘积除以它的右侧数

求重新排列后数列中所有数对中最大得分尽可能小(第一个数对不参与排序,仍然为第一个)

思路:

非常简单,可以根据它对后面的影响排序

即若a i.l/a j.r < a j.l/a i.r则a i在a j前

则a i.l * a i.r < a j.l * a j.r则a i在a j前

那么我只需要一个重载运算符

但是呢,数据较大需要高精度

 #include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<queue>
#include<vector>
#include<set>
#include<map>
#include<stack>
#define inf 2147483647
#define ll long long
#define MOD 1000000000
#define MAXN 1010
using namespace std;
inline int read()
{
int x=,f=;
char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-;ch=getchar();}
while(isdigit(ch)) {x=x*+ch-'';ch=getchar();}
return x*f;
}
int n;
struct data
{
int l,r;
bool operator < (const data &a) const
{
return (l*r<a.l*a.r)||(l*r==a.l*a.r&&r<a.r);
}
}g[MAXN];
struct bign
{
ll num[MAXN*];
int len;
bign() {memset(num,,sizeof(num));len=;}
void mul(int a)
{
ll k=;
for(int i=;i<=len;i++)
{
num[i]=num[i]*a+k;
k=num[i]/MOD;
num[i]%=MOD;
}
if(k) {len++;num[len]=k;}
}
bign div(int a)
{
ll k=;
bign res;res.len=len;
for(int i=len;i>=;i--)
{
res.num[i]=(num[i]+k)/a;
k=((num[i]+k)%a)*MOD;
}
if(!res.num[len]&&res.len) res.len--;
return res;
}
void print()
{
printf("%d",num[len]);
for(int i=len-;i>=;i--)
{
printf("%09d",num[i]);
}
}
}tmp,ans;
void amax(bign b)
{
bool flag=;
if(ans.len>b.len) return ;
if(ans.len<b.len)
{
ans.len=b.len;
for(int i=ans.len;i>=;i--) ans.num[i]=b.num[i];
return ;
}
for(int i=ans.len;i>=;i--)
if(ans.num[i]<b.num[i]) {flag=;break;}
if(flag)
for(int i=ans.len;i>=;i--) ans.num[i]=b.num[i];
}
int main()
{
n=read();
int a=read(),b=read();
for(int i=;i<=n;i++) g[i].l=read(),g[i].r=read();
sort(g+,g+n+);
tmp.num[]=a;
for(int i=;i<=n;i++)
{
amax(tmp.div(g[i].r));
tmp.mul(g[i].l);
}
ans.print();
}

orz 写了个压位,又是小技巧调一年

第一次是因为没搞清楚*=的优先级

然后是因为除法考虑余数时算错了数组

luogu 1080 国王游戏的更多相关文章

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

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

  2. luogu P1080 国王游戏

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

  3. luogu P1080国王游戏

    贪心加高精 传送门:QWQ 先考虑两个人 a0 b0 p1 a1 b1 p2 a2 b2 那么满足:\(\huge ans1=\max(\frac{a0}{b1} , \frac{a0a1}{b2}) ...

  4. Luogu 1080 【NOIP2012】国王游戏 (贪心,高精度)

    Luogu 1080 [NOIP2012]国王游戏 (贪心,高精度) Description 恰逢H国国庆,国王邀请n位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己 ...

  5. [noip2012]国王游戏<贪心+高精度>

    题目链接: https://vijos.org/p/1779 https://www.luogu.org/problem/show?pid=1080 http://codevs.cn/problem/ ...

  6. NOIP2012 国王游戏

    2国王游戏 (game.cpp/c/pas) [问题描述] 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数 ...

  7. 【NOIP 2012 国王游戏】 贪心+高精度

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

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

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

  9. luogu P2123 皇后游戏

    传送门 跟国王游戏一样的分析 考虑相邻的两个大臣,设他们前面的\(\sum a_j\)为\(s\),同时注意到后面人的贡献更大 所以\(i\)在前面时,\(c_j=\max(\max(c_{last} ...

随机推荐

  1. Mysql 字符函数详解

    MySql 所有字符串函数函数详解 ASCII(str) 返回str最左边第一位字符的ASCII编码,如果str为空,则返回 0 .如果str为NULL,则返回NULL -- 只返回a的ASCII编码 ...

  2. 17Spring前置通知

    1).加入jar包:下载地址 spring-beans-4.1.6.RELEASE.jar commons-logging-1.1.3.jar spring-context-4.1.6.RELEASE ...

  3. python 开发搭建目录规范

    软件目录结构规范有什么好处: 通过规范化,能够更好的控制软件结构,让程序具有更高的可读性. 项目目录组织结构如下: Foo/ # 项目名 --bin/ # 可执行文件目录 --foo # 可执行程序 ...

  4. python 网络编程基础

    1. 内容回顾补充 [] [^] 带有特殊意义的元字符到字符组内大部分都会取消它的特殊意义. 会取消的: [()+*.] -[(-)] -的位置决定了它的意义,写在字符组的第一个位置/最后一个位置就表 ...

  5. Spring Boot 2(一):【重磅】Spring Boot 2.0权威发布

    就在今天Spring Boot2.0.0.RELEASE正式发布,今天早上在发布Spring Boot2.0的时候还出现一个小插曲,将Spring Boot2.0同步到Maven仓库的时候出现了错误, ...

  6. 【Kafka问题解决】Connection to xxx could not be established. Broker may not be available.

    请检查Kafka的config/server.properties 看看是否有填写 listeners=PLAINTEXT://kafka-host:9092 advertised.listeners ...

  7. javascript倒计时代码及倒计时弹窗

    在前端开发中,难免会用到倒计时.如做的双十一活动,在距活动开始的半个月前需要做些宣传工作,需要告知用户优惠活动什么时候开始.这个时候就要用到倒计时,如在整站的某个页面提醒用户活动什么时候开始等.而在活 ...

  8. lua报错,看到报错信息有tail call,以为和尾调用有关,于是查了一下相关知识

    尾调用是指在函数return时直接将被调函数的返回值作为调用函数的返回值返回,尾调用在很多语言中都可以被编译器优化, 基本都是直接复用旧的执行栈, 不用再创建新的栈帧, 原理上其实也很简单, 因为尾调 ...

  9. STL map的用法介绍!

    map对象的定义 使用前添加map头文件,必须分别指明键和值的类型: map<string,int>word_count; map的构造函数: map<k,v>m;   创建一 ...

  10. ModelForm组件和forms组件补充

    forms组件补充: forms组件的三个字段:ChoiceField, ModelChoiceField & ModelMultipleChoiceField # forms组件:Choic ...