首页 > 其他 > 详细

7-15 PAT Judge (25分)

时间:2020-04-29 11:53:36      阅读:74      评论:0      收藏:0      [点我收藏+]

技术分享图片

 

 

 技术分享图片

 

 

 技术分享图片

 

 

 技术分享图片

 

 

 解题思路:

题目要求:

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;
}

 

7-15 PAT Judge (25分)

原文:https://www.cnblogs.com/snzhong/p/12800807.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!