zoukankan      html  css  js  c++  java
  • 国王游戏(微扰贪心加高精度)

    恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏。

    首先,他让每个大臣在左、右手上面分别写下一个整数,国王自己也在左、右手上各写一个整数。

    然后,让这 n 位大臣排成一排,国王站在队伍的最前面。

    排好队后,所有的大臣都会获得国王奖赏的若干金币,每位大臣获得的金币数分别是:

    排在该大臣前面的所有人的左手上的数的乘积除以他自己右手上的数,然后向下取整得到的结果。

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

    注意,国王的位置始终在队伍的最前面。

    输入格式

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

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

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

    输出格式

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

    数据范围

    1n10001≤n≤1000
    0<a,b<100000<a,b<10000

    输入样例:

    3
    1 1
    2 3
    7 4
    4 6
    

    输出样例:

    2

    代码
    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=1e3+10;
    struct node{
        int l,r;
    };
    node a[maxn];
    vector<int> now,ans;
    int cmp(const node &x,const node &y)
    {
        if(x.l*x.r==y.l*y.r)
        return x.r<y.r;
        return (x.l*x.r<y.l*y.r);
    }
    vector<int> mul(vector<int> a,int x)
    {
        reverse(a.begin(),a.end());
        for(int i=0;i<a.size();i++)
        {
            a[i]=a[i]*x;
        }
        for(int i=0;i<a.size();i++)
        {
            if(i<a.size()-1)
                a[i+1]=a[i+1]+a[i]/10;
            else if(a[i]>=10)
                a.push_back(a[i]/10);
            a[i]=a[i]%10;
        }
        reverse(a.begin(),a.end());
        return a;
    }
    vector<int> dis(vector<int> a,int x)
    {
        vector<int> c;
        int ok=1,s=0;
        for(int i=0;i<a.size();i++)
        {
            s=s*10+a[i];
            if(!ok||s>=x)
            {
                ok=0;
                c.push_back(s/x);
            }
            s=s%x;    
        }
        return c;
    }
    vector<int> max_2(vector<int> a,vector<int> b)
    {
        if(a.size()!=b.size())
        return a.size()>b.size()?a:b;
        return a>b?a:b;
    }
    void out(vector<int> ans)
    {
        for(int i=0;i<ans.size();i++)
        {
            cout<<ans[i];
         } 
         cout<<"
    ";
    }
    int main()
    {
        int n;
        cin>>n;
        for(int i=0;i<=n;i++)
        {
            cin>>a[i].l>>a[i].r;
        }
        sort(a+1,a+1+n,cmp);
        now.push_back(1);
        for(int i=1;i<=n;i++)
        {
            now=mul(now,a[i-1].l);
            ans=max_2(ans,dis(now,a[i].r));
        }
        out(ans);
        return 0;
     } 
     
  • 相关阅读:
    redis 篇
    redis 篇
    Url 简单讲解
    django 分组统计遇见的问题
    Django REST framework 自定义字段
    python 之 MRO 异常
    redis中的事务、lua脚本和管道的使用场景
    不实例化一个 class 的时候使用它的property
    转载牛人的英语学习方法,值得学习
    2017年值得学习的3个CSS特性
  • 原文地址:https://www.cnblogs.com/hh13579/p/11288985.html
Copyright © 2011-2022 走看看