• CoderForce 141C-Queue (贪心+构造)


    题目大意:一个队伍,每个人只记得前面比他高的人的个数x。现在将队伍散开,问能否构造出一支满足条件的队伍,如果能,再给每个人一个满足题意的身高。

    题目分析:一个一个排,x越少越先排,如果x比已经排好的人数大,那么无解。否则,将这个人放到已经排好的队伍中的第x+1个位置上去,并赋予一个合适的身高,使得前x个人都比他高。

    代码如下:

    # include<iostream>
    # include<cstdio>
    # include<queue>
    # include<string>
    # include<algorithm>
    using namespace std;
    
    struct People
    {
        string name;
        int num;
        People(string p,int a):name(p),num(a){}
        bool operator < (const People &a) const{
            return num<a.num;
        }
    };
    int n;
    vector<People>v,ans;
    
    bool ok()
    {
        ans.clear();
        sort(v.begin(),v.end());
        for(int i=0;i<n;++i){
            if(v[i].num>i) return false;
            int k=v[i].num;
            if(k==0){
                ans.insert(ans.begin(),People(v[i].name,50001));
                continue;
            }
            int minn=ans[0].num;
            for(int j=1;j<k;++j) minn=min(ans[j].num,minn);
            ans.insert(ans.begin()+k,People(v[i].name,minn-1));
        }
        return true;
    }
    
    int main()
    {
        string p;
        int a;
        while(~scanf("%d",&n))
        {
            v.clear();
            for(int i=0;i<n;++i){
                cin>>p>>a;
                v.push_back(People(p,a));
            }
            if(!ok()) printf("-1
    ");
            else{
                for(int i=0;i<ans.size();++i)
                    cout<<ans[i].name<<' '<<ans[i].num<<endl;
            }
        }
        return 0;
    }
    

      

  • 相关阅读:
    spring基础
    hibernate基础
    struts2基础
    javaEE(17)_邮件原理与JavaMail开发
    javase(14)_java基础增强
    javase(13)_网络编程
    javase(12)_集合框架_Queue
    C++:memset ,memcpy 和strcpy 的根本区别!
    16位的二进制数,每4位为一个数,写函数求他们的和
    态度!!!
  • 原文地址:https://www.cnblogs.com/20143605--pcx/p/5165473.html
Copyright © 2020-2023  润新知