• PAT (Advanced Level) 1062. Talent and Virtue (25)


    简单排序。题意较长。

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<queue>
    #include<vector>
    #include<string>
    #include<stack>
    #include<map>
    #include<algorithm>
    using namespace std;
    
    struct X
    {
        int id;
        int v,t;
        int f;
    }s[100000+10],tmp[100000+10],Ans[100000+10];
    int n,L,H;
    int tot;
    
    bool cmp(const X&a,const X&b)
    {
        if(a.t+a.v==b.t+b.v&&a.v==b.v) return a.id<b.id;
        if(a.t+a.v==b.t+b.v) return a.v>b.v;
        return a.t+a.v>b.t+b.v;
    }
    
    
    int main()
    {
        scanf("%d%d%d",&n,&L,&H);
        for(int i=1;i<=n;i++) scanf("%d%d%d",&s[i].id,&s[i].v,&s[i].t);
        for(int i=1;i<=n;i++) s[i].f=0;
    
        for(int i=1;i<=n;i++) if(s[i].t<L||s[i].v<L) s[i].f=1;
    
        tot=0;
        int ans=0;
    
        for(int i=1;i<=n;i++)
        {
            if(s[i].f==1) continue;
            if(s[i].t>=H&&s[i].v>=H)
            {
    
                tmp[tot++]=s[i];
                s[i].f=1;
            }
        }
    
        sort(tmp,tmp+tot,cmp);
        for(int i=0;i<tot;i++) Ans[ans++]=tmp[i];
        tot=0;
    
        for(int i=1;i<=n;i++)
        {
            if(s[i].f==1) continue;
            if(s[i].t<H&&s[i].v>=H)
            {
    
                tmp[tot++]=s[i];
                s[i].f=1;
            }
        }
    
        sort(tmp,tmp+tot,cmp);
        for(int i=0;i<tot;i++) Ans[ans++]=tmp[i];
        tot=0;
    
        for(int i=1;i<=n;i++)
        {
            if(s[i].f==1) continue;
            if(s[i].t<H&&s[i].v<H&&s[i].v>=s[i].t)
            {
    
                tmp[tot++]=s[i];
                s[i].f=1;
            }
        }
    
        sort(tmp,tmp+tot,cmp);
        for(int i=0;i<tot;i++) Ans[ans++]=tmp[i];
        tot=0;
    
        for(int i=1;i<=n;i++)
        {
            if(s[i].f==1) continue;
    
                tmp[tot++]=s[i];
                s[i].f=1;
    
        }
    
        sort(tmp,tmp+tot,cmp);
        for(int i=0;i<tot;i++) Ans[ans++]=tmp[i];
        tot=0;
    
        printf("%d
    ",ans);
        for(int i=0;i<ans;i++)
        {
            printf("%08d %d %d
    ",Ans[i].id,Ans[i].v,Ans[i].t);
        }
        return 0;
    }
  • 相关阅读:
    交换两个变量的值的若干种方法
    排序算法之冒泡排序
    JAVA宇宙无敌复习资料
    HTML中Float和元素定位
    HTML盒子模型
    HTML表单
    HTML中Css补充资料
    HTML中Css详细介绍
    HTML表格及框架介绍
    HTML网页的基本结构及基本功能
  • 原文地址:https://www.cnblogs.com/zufezzt/p/5616569.html
Copyright © 2020-2023  润新知