• PAT (Advanced Level) 1075. PAT Judge (25)


    简单模拟题。

    注意一点:如果一个人所有提交的代码都没编译通过,那么这个人不计排名。

    如果一个人提交过的代码中有编译不通过的,也有通过的,那么那份编译不通过的记为0分。

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<vector>
    #include<map>
    #include<stack>
    #include<queue>
    #include<string>
    #include<algorithm>
    using namespace std;
    
    const int maxn=10000+10;
    int n,k,m;
    int val[10];
    
    struct X
    {
        int Rank;
        int num;
        int id;
        int tot;
        int get[10];
    }s[maxn],ans[maxn];
    int sz;
    
    bool cmp(const X&a,const X&b)
    {
        if(a.tot==b.tot&&a.num==b.num) return a.id<b.id;
        if(a.tot==b.tot) return a.num>b.num;
        return a.tot>b.tot;
    }
    
    int main()
    {
        scanf("%d%d%d",&n,&k,&m);
        for(int i=1;i<=k;i++) scanf("%d",&val[i]);
        for(int i=1;i<=n;i++)
        {
            s[i].id=i;
            s[i].num=0;
            s[i].tot=0;
            for(int j=1;j<=k;j++) s[i].get[j]=-2;
        }
    
        for(int i=1;i<=m;i++)
        {
            int id,pro,get;
            scanf("%d%d%d",&id,&pro,&get);
            s[id].get[pro]=max(s[id].get[pro],get);
        }
    
        sz=0;
        for(int i=1;i<=n;i++)
        {
            int fail=1;
            for(int j=1;j<=k;j++)
                if(s[i].get[j]>=0) fail=0;
            if(fail==1) continue;
            ans[sz++]=s[i];
        }
    
        for(int i=0;i<sz;i++)
            for(int j=1;j<=k;j++)
                if(ans[i].get[j]==-1) ans[i].get[j]=0;
    
        for(int i=0;i<sz;i++)
        {
            for(int j=1;j<=k;j++)
            {
                if(ans[i].get[j]==-2) continue;
                ans[i].tot=ans[i].tot+ans[i].get[j];
                if(ans[i].get[j]==val[j]) ans[i].num++;
            }
        }
    
        sort(ans,ans+sz,cmp);
    
        ans[0].Rank=1;
        for(int i=1;i<sz;i++)
        {
            if(ans[i].tot==ans[i-1].tot)
                ans[i].Rank=ans[i-1].Rank;
            else ans[i].Rank=i+1;
        }
    
        for(int i=0;i<sz;i++)
        {
            printf("%d %05d %d",ans[i].Rank,ans[i].id,ans[i].tot);
            for(int j=1;j<=k;j++)
            {
                printf(" ");
                if(ans[i].get[j]==-2) printf("-");
                else printf("%d",ans[i].get[j]);
            }
            printf("
    ");
        }
    
        return 0;
    }
  • 相关阅读:
    小海豚 Flow Photo 推广码3029 手机破解版下载
    centos6升级升级openssl为1.0.2u
    centos6修改yum源
    关于单点登录系统(二)
    关于使用notePad++添加sql引号
    关于MySQL海量数据分页查询
    晒书求共勉 希
    HTML5+CSS3实现的小风车转动的童年 希
    用JavaScript+CSS给自己写一个倒计时提示主页 希
    P2764 最小路径覆盖问题
  • 原文地址:https://www.cnblogs.com/zufezzt/p/5634917.html
Copyright © 2020-2023  润新知