zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    6.11 修饰符的适用范围
    5.10 对象与垃圾回收
    5.9 枚举类
    5.8 java 11增强的Lambda表达式
    5.7 内部类
    5.6 接口
    5.5 抽象类
    5.4 final修饰符
    5.3 类成员
    5.2 Object类中两个需要被重写的方法
  • 原文地址:https://www.cnblogs.com/zufezzt/p/5616569.html
Copyright © 2011-2022 走看看