luogu 1080 国王游戏
题目大意:
有一些数对,每个数对的得分为它之前所有数对的左侧数之乘积除以它的右侧数
求重新排列后数列中所有数对中最大得分尽可能小(第一个数对不参与排序,仍然为第一个)
思路:
非常简单,可以根据它对后面的影响排序
即若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 国王游戏的更多相关文章
- Luogu P1080国王游戏(贪心)
国王游戏 题目链接:国王游戏 ps:题目数据说明了要写高精度. 这个题的答案是\(a.l * a.r < b.l * b.r\)按照这个进行排序 题解中大部分只是如何证明排序是: \(a.l * ...
- luogu P1080 国王游戏
题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排成一排,国王站在队伍的最 ...
- luogu P1080国王游戏
贪心加高精 传送门:QWQ 先考虑两个人 a0 b0 p1 a1 b1 p2 a2 b2 那么满足:\(\huge ans1=\max(\frac{a0}{b1} , \frac{a0a1}{b2}) ...
- Luogu 1080 【NOIP2012】国王游戏 (贪心,高精度)
Luogu 1080 [NOIP2012]国王游戏 (贪心,高精度) Description 恰逢H国国庆,国王邀请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 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数 ...
- 【NOIP 2012 国王游戏】 贪心+高精度
题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右 手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排 成一排,国王站在队伍 ...
- Codevs 1198 国王游戏 2012年NOIP全国联赛提高组
1198 国王游戏 2012年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 恰逢 H 国国庆,国王邀 ...
- luogu P2123 皇后游戏
传送门 跟国王游戏一样的分析 考虑相邻的两个大臣,设他们前面的\(\sum a_j\)为\(s\),同时注意到后面人的贡献更大 所以\(i\)在前面时,\(c_j=\max(\max(c_{last} ...
随机推荐
- Auto-Encoders实战
目录 Outline Auto-Encoder 创建编解码器 训练 Outline Auto-Encoder Variational Auto-Encoders Auto-Encoder 创建编解码器 ...
- Python之目录结构
Python之目录结构 项目名project_name project_name -|--bin (可执行文件) --|--start.py import os,sys #设置环境变量 BASE_DI ...
- Java线上应用故障排查
线上故障主要2种: CPU利用率很高, 内存占用率很大 一.CPU利用率很高 1. top查询那个进程CPU使用率高 2. 显示进程列表 ps -mp pid -o THREAD,tid,time 找 ...
- Vue如何使用vue-awesome-swiper实现轮播效果
在Vue项目中如何实现轮播图的效果呢,在传统项目中第一个想到的一般都是swiper插件,代码简单好用.一开始我也是直接npm安装swiper然后照着之前的传统写法写,然而却没有效果,只会显示图片但没有 ...
- BNUOJ 26223 CosmoCraft
CosmoCraft Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HDU. Original ID: ...
- 客户端用plsql进行中文条件查询时无结果的解决办法
1.SELECT * FROM v$nls_parameters ; 查看NLS_CHARACTERSET 的值是多少,我的AL32UTF8- 查找客户机器的注册表,查找NLS_LANG的值,改成AL ...
- PatentTips - Register file supporting transactional processing
BACKGROUND OF THE INVENTION With the rise of multi-core, multi-threaded data processing systems, a k ...
- Organize Your Train part II 字典树(此题专卡STL)
Organize Your Train part II Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8787 Acce ...
- git一个本地仓库连接多个远程仓库
前言:由于公司的GIT是内网服务器,而在家工作访问不了内网服务器,由此想把本地仓库连接一个外网的GIT服务器(码云),方便不在公司时开发. 原文 某些场合,一个git项目需要能同时使用两个甚至多个远程 ...
- 深入理解hadoop(一)
hadoop 前世今生 hadoop最早起源于开源收缩引擎nutch,由dong cutting 贡献,但由于nutch最初的设计不能解决数10亿级别的文件存储和索引而遇到了严重的可扩展性问题,直到 ...