题目
按\(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]国王游戏的更多相关文章

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

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

  2. 继续写高精!noip2012国王游戏。。。

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

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

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

  4. NOIP2012 国王游戏

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

  5. NOIP2012国王游戏

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

  6. NOIP2012国王游戏(60分题解)

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

  7. 【题解】洛谷P1080 [NOIP2012TG] 国王游戏(贪心+高精度)

    次元传送门::洛谷P1080 思路 我们模拟一下只有两个大臣的时候发现 当a1​∗b1​<a2​∗b2​是ans1<ans2 所以我们对所有大臣关于左右手之积进行排序 得到最多钱的大臣就是 ...

  8. 洛谷【P1080】国王游戏

    我对贪心的理解:https://www.cnblogs.com/AKMer/p/9776293.html 题目传送门:https://www.luogu.org/problemnew/show/P10 ...

  9. [NOIP2012]国王游戏 题解

    题目大意: n个人排成一排,排头固定,其他可以变.每一个人左右手都有一个整数,一个人的分数为他所有前面的人左手上的数的乘积除以他右手上的数(向下取整),求在整列中最大分数的最小值. 思路: 首先,一切 ...

随机推荐

  1. 《剑指offer》算法题第一天

    按照个人计划,从今天开始做<剑指offer>上面的算法题,练习平台为牛客网,上面对每道题都有充分的测试实例,感觉还是很不错的.今天下午做了四道题,分别为: 1. 二叉树的深度(书55题) ...

  2. EasyUI-combotree 下拉树 数据回显时默认选中

    组合树(combotree)把选择控件和下拉树结合起来.它与组合框(combobox)相似,不同的是把列表替换成树组件.组合树(combotree)支持带有用于多选的树状态复选框的树. 依赖 comb ...

  3. php的intval函数

    PHP intval() 函数 PHP 可用的函数PHP 可用的函数 intval() 函数用于获取变量的整数值. intval() 函数通过使用指定的进制 . PHP , PHP , PHP 语法 ...

  4. Tracer使用

    1.选择event List可以迅速完成操作,而选择simulation就会一步一步地执行操作,但是如果都点了下方的Delete删了记录的话,所有的机器都是该整个流程执行完毕的结果.

  5. Vue.js---配置开发环境

    首先安装Node.js我就不介绍了! win+r , 输入cmd,回车: 1.安装淘宝镜像 在国内直接使用npm的官方镜像是比较慢的,这里我们采用的是淘宝镜像 npm install -g cnpm ...

  6. 【编程漫谈】Hello world!

    Hello world!是打开编程世界的第一把钥匙,只要你能运行出Hello world!,基本上就算入了个门了,因为程序正确的运行代表着基本开发环境都有了,包括编辑器,编译器,解释器,运行环境等待, ...

  7. leetcode-easy-array-136. Single Number

    mycode   75.80% class Solution(object): def singleNumber(self, nums): """ :type nums: ...

  8. leetcode 160相交链表

    暴力解法当然可以遍历两个链表,不过time O(mn) space O(1)暂且不说, 方法一:双指针, time O(m+n),space O(1) 可以对比判断环形链表的快慢指针法. 这种方法构思 ...

  9. json -- fastjson如何序列化@Transient的字段

    今天把fastjson包改成了1.2.58,发现@Transient标注的字段序列化后不见了,但是项目需要把@Transient字段序列化,处理方法: 原文:https://github.com/al ...

  10. flutter ListView列表和导航传值以及回调

    main.dart import 'package:flutter/material.dart'; void main(){ return runApp(MyApp()); } class Produ ...