首页 > 其他 > 详细

1075 PAT Judge (25分)

时间:2020-03-07 21:03:46      阅读:75      评论:0      收藏:0      [点我收藏+]

1. 题目

技术分享图片

2. 思路

常规题

3. 注意点

4. 代码

#include<cstdio>
#include<algorithm>
#include<string>
#include<vector>
#include<map>
#include<iostream> 

// 19:30 -  20:31
using namespace std;

#define MAXN 100010
#define MAXU 10010

struct u{
    int id;
    map<int, int> pro;
    int perfect;
    int sum;
    bool flag;
}user[MAXU];

int n, k, m;
int problem[MAXN];

bool cmp(u a, u b){
    if(a.flag != b.flag){
        return a.flag > b.flag;
    }
    if(a.sum != b.sum){
        return a.sum > b.sum;
    }
    if(a.perfect != b.perfect){
        return a.perfect > b.perfect; 
    }
    return a.id < b.id;
}

int main(){
    scanf("%d %d %d", &n, &k, &m);
    for(int i=1;i<=k;i++){
        scanf("%d", &problem[i]);
    }
    int id, pro, score;
    for(int i=1;i<=m;i++){
        scanf("%d %d %d", &id, &pro, &score);
        user[id].id = id;
        if(score >= 0){
            user[id].flag = true;
        }
        if(score == -1){
            if(user[id].pro.count(pro) == 0){
                user[id].pro[pro] = 0;
            }
        }else if(score >= 0){
            if(user[id].pro.count(pro) == 0){
                user[id].pro[pro] = score;
                if(score == problem[pro]){
                    user[id].perfect++;
                }
                user[id].sum += score;
            }else if(user[id].pro[pro] < score){
                user[id].sum -= user[id].pro[pro];
                user[id].pro[pro] = score;
                user[id].sum += score;
                if(score == problem[pro]){
                    user[id].perfect++;
                }
            }
        }
    }
    sort(user, user+MAXU, cmp);

    int rank = 1;
    int sum = user[0].sum;
    for(int i=0;user[i].flag != false;i++){
        if(user[i].sum != sum){
            rank = i+1;
            sum = user[i].sum;
        }
        printf("%d %05d %d ", rank, user[i].id, user[i].sum);
        for(int j=1;j<k;j++){
            if(user[i].pro.count(j) == 0){
                printf("- ");
            }else{
                printf("%d ", user[i].pro[j]);
            }
        }
        if(user[i].pro.count(k) == 0){
            printf("-");
        }else{
            printf("%d", user[i].pro[k]);
        }
        printf("\n");
    }
}

1075 PAT Judge (25分)

原文:https://www.cnblogs.com/d-i-p/p/12436887.html

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