zoukankan      html  css  js  c++  java
  • 7-15 PAT Judge (25分)

     

     

     

     解题思路:

    题目要求:

    1、按总分降序,若总分相等,则按题目满分数目降序,若满分题目数目相等,则按学号升序

    2、若全部题目均是未提交或者提交未通过,不输出

    #include <stdio.h>
    #define MaxN 10001
    #define MaxK 5+1
    typedef struct{
        int sum,cnt,rank,id,Rflag,Ptag[MaxK];
        int num[MaxK];
    } Node;
    int cmp(const void *a,const void *b){
        Node* c = (Node*)a;
        Node* d = (Node*)b;
        if(c->sum == d->sum){
            if(c->cnt == d->cnt){
                return c->id > d->id;
            }
            return c->cnt < d->cnt;
        }
        return c->sum < d->sum;
    }
    
    int main() {
        int n,k,m;
        scanf("%d %d %d",&n,&k,&m);
        int i,j;
        int max[k+1];
        Node f[n+1];
        for(i=1; i<=k; i++) {
            scanf("%d",&max[i]);
        }
        for(i=1; i<=n; i++) {//初始化
            f[i].cnt=0;
            f[i].rank=0;
            f[i].sum=0;
            f[i].id=i;
            f[i].Rflag=0;
            for(j=1; j<=MaxK; j++) {
                f[i].num[j]=0;
                f[i].Ptag[j]=0;
            }
        }
        for(i=0; i<m; i++) {
            int x,y,z;
            scanf("%d %d %d",&x,&y,&z);
            if(z>-1) {
                f[x].Rflag=1;//标记该题已提交且通过
                if(f[x].num[y]<z)
                    f[x].num[y]=z;
            }
            f[x].Ptag[y]=1;//标记该题有提交
    
        }
        for(i=1; i<=n; i++) {
            if(f[i].Rflag) {
                for(j=1; j<=k; j++) {
                        f[i].sum+=f[i].num[j];
                    if(f[i].num[j]==max[j])//记录满分题目数目
                        f[i].cnt++;
                }
            }
        }
        qsort(f+1,n,sizeof(Node),cmp);
        int r=1,cnt=1;
        f[1].rank=r;
        for(i=2; i<=n; i++) {
            cnt++;
            if(f[i-1].sum==f[i].sum)
                f[i].rank=r;
            else {
                r=cnt;
                f[i].rank=r;
            }
    
        }
        for(i=1; i<=n; i++) {
            if(f[i].Rflag) {
                printf("%d %05d %d",f[i].rank,f[i].id,f[i].sum);
                for(j=1; j<=k; j++) {
                    if(f[i].Ptag[j])
                        printf(" %d",f[i].num[j]);
                    else
                        printf(" -");
                }
                puts("");
            }
    
        }
        return 0;
    }
  • 相关阅读:
    angular2^ typescript 将 文件和Json数据 合并发送到服务器(1.客户端处理)
    错误的尝试:回射程序改进2
    XML Schema笔记
    回射程序改进1
    DTD笔记
    XML语法笔记
    判断IPv6地址合法性
    线程相关函数(POSIX线程):
    使用string实现一个用于储存那些太大而无法使用 long long 的数
    基本SCTP套接字编程常用函数
  • 原文地址:https://www.cnblogs.com/snzhong/p/12800807.html
Copyright © 2011-2022 走看看