题目链接:https://www.luogu.org/problemnew/show/P1080

参考:https://www.luogu.org/problemnew/solution/P1080

思路:这道题的考点是贪心和高精度。

贪心部分:

…(设这一段乘积为X1) …(设这一段乘积为Y2)
L1 R1
…(设这一段乘积为X2) …(设这一段乘积为Y2)
L2 R2
由上面这张表格可以知道这样的情况时:

第一个人所得的金币数为X1/R1;

第二个人所得的金币数为X1×L1×X2/R2;

所以最小值为 max(X1/R1, X1×L1×X2/R2);


然后交换两个人的位置


…(这一段乘积为X1) …(这一段乘积为Y2)
L2 R2
…(这一段乘积为X2) …(这一段乘积为Y2)
L1 R1
由上面这张表格可以知道交换后的情况时:

第一个人所得的金币数为X1×L2×X2/R1;

第二个人所得的金币数为X1/R2;

所以此时最小值为max(X1×L2×X2/R1, X1/R2);

综合上面两种情况:

如果变换之前的情况要优于变换之后的情况,那么

max(X1/R1, X1×L1×X2/R2) < max(X1×L2×X2/R1, X1/R2);

而X1/R1 < X1×L2×X2/R1 恒成立;

X1×L1×X2/R2 > X1/R2;

所以上述条件成立时

必须有X1×L1×X2/R2 < X1×L2×X2/R1 恒成立;所以化简可得 L1×R1 < L2×R2恒成立。

综上,很容易想到Li×Ri越大的应该排在越后面,所以对数据排个序就行。

另外就是高精度,数据最大可能达到10的4000次方,故需要使用高精度,这种高精度方法是参考的别人的,比较方便巧妙,不需要花费时间进行整数与字符串的转化。

代码如下:

 #include<cstdio>
#include<algorithm>
using namespace std; struct node{
int a,b;
bool operator < (const node& other) const{
return a*b<other.a*other.b;
}
}dat[]; int n,in=;
int hp[]; void mul(int k){
for(int i=;i<=in;i++)
hp[i]*=dat[k].a;
for(int i=;i<=in;i++){
hp[i+]+=hp[i]/;
hp[i]%=;
}
in++;
while(hp[in]>){
hp[in+]=hp[in]/;
hp[in]%=;
in++;
}
if(hp[in]==)
in--;
} void div(){
for(int i=in;i>=;i--){
hp[i-]+=((hp[i]%dat[n].b)*);
hp[i]/=dat[n].b;
}
while(hp[in]==)
in--;
} int main(){
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d%d",&dat[i].a,&dat[i].b);
sort(dat+,dat+n+);
hp[]=dat[].a;
for(int i=;i<n;i++)
mul(i);
div();
if(in==)
printf(""); //最终数组长度为0,由于每个人都会得到赏金,故每个人最多分到1赏金
else
for(int i=in;i>=;i--)
printf("%d",hp[i]);
printf("\n");
return ;
}

luoguP1080 国王游戏 (贪心+高精度)的更多相关文章

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

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

  2. P1080 国王游戏 贪心 高精度

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

  3. P1080 【NOIP 2012】 国王游戏[贪心+高精度]

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

  4. 【NOIP2012提高组】国王游戏 贪心 + 高精度

    题目分析 题目答案不具有单调性,所以不可以二分,转而思考贪心.因为无法确定位置,所以考虑如何才能让对于每一个$1 ~ i$使得$i$的答案最大,即$1 ~ i$最后一个最优.若设对于位置$i$,$a[ ...

  5. luoguP1080 国王游戏 题解(NOIP2012)(贪心+高精)

    luoguP1080 国王游戏 题目 #include<iostream> #include<cstdlib> #include<cstdio> #include& ...

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

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

  7. 洛谷P1080(NOIP2012)国王游戏——贪心排序与高精度

    题目:https://www.luogu.org/problemnew/show/P1080 排序方法的确定,只需任取两个人,通过比较与推导,可以得出ai*bi小的人排在前面: 高精度写的时候犯了些细 ...

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

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

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

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

随机推荐

  1. 初次从eclipse转到intellij idea上的一些经验

    如果出现:mvn 请使用 -source 7 或更高版本以启用 diamond 运算符 这种问题 pom.xml里 <build>标签里面 需要加入这么一段 <plugins> ...

  2. [UE4]ue4 c++学习推荐

    我由易到难推荐,不过在此之前还是先看看官方对于VS设置的推荐: https://docs.unrealengine.com/latest/INT/Programming/Development/Vis ...

  3. ECCV 2018 | 旷视科技提出GridFace:通过学习局部单应变换实现人脸校正

    全球计算机视觉三大顶会之一 ECCV 2018(European Conference on Computer Vision)即将于 9 月 8 -14 日在德国慕尼黑拉开帷幕,旷视科技有多篇论文被此 ...

  4. redis实现分布式锁 转自importnew 记录一下

    前言 分布式锁一般有三种实现方式:1. 数据库乐观锁:2. 基于Redis的分布式锁:3. 基于ZooKeeper的分布式锁.本篇博客将介绍第二种方式,基于Redis实现分布式锁.虽然网上已经有各种介 ...

  5. 配置Ubuntu虚拟环境

    1.ubuntu默认root用户没有激活,激活root用户,就要为root用户创建密码 $sudo passwd root   2.修改主机名 $vi /etc/hostname   3.安装ssh服 ...

  6. 给Jquery easyui 的datagrid 每行增加操作链接(转)

    http://www.thinkphp.cn/code/207.html 通过formatter方法给Jquery easyui 的datagrid 每行增加操作链接我们都知道Jquery的EasyU ...

  7. JAVA Spring 简单的配置和操作 ( 创建实体类, 配置XML文件, 调试 )

    < 1 > 实体类 Person package java_spring.modle; /** * 一个实体类( Person ) */ public class Person { pri ...

  8. 门禁系统socket通讯编程

    最近遇到一个socke udp协议通讯的需求,而且是16进制数据接收.这样在传输参数的时候老是提示参数错误,因为计算机是不能直接传输16进制的,会自行转换,所有以下代码非常完美的解决我的问题,同时也让 ...

  9. WebService客户端调用的几种方式

    1.用组件HTTPRIO,支持VCL WIN32和FIRE MONKEY跨平台Android手机 HTTPRIO1.URL := 'http://127.0.0.1:8080/soap/IsoapTe ...

  10. 机器学习入门-K-means算法

    无监督问题,我们手里没有标签 聚类:相似的东西聚在一起 难点:如何进行调参 K-means算法 需要制定k值,用来获得到底有几个簇,即几种类型 质心:均值,即向量各维取平均值 距离的度量: 欧式距离和 ...