zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    奥赛-欧几里得算法-最大公约数
    dbForge Studio for MySQL 中文乱码问题
    【C++】纯C++实现http打开网页下载内容的功能
    【C++】C++string类总结
    【C++】C++中的string类的用法总结
    【网络编程/C++】修改本机ip地址
    MFC控件的SubclassDlgItem
    MFC 不让程序显示在任务栏上
    MFC中无边框窗口的拖动
    MFC 获取图像的大小
  • 原文地址:https://www.cnblogs.com/zufezzt/p/5634917.html
Copyright © 2011-2022 走看看