1075 PAT Judge (25分)

如果成绩是-1,输出的时候要输出0而不是-1。(在他能被输出的时候)如果没提交过输出-。
要注意一下,考题的编号是从1开始的,所以数组要开够,要注意下标的取值。

#include <bits/stdc++.h>

using namespace std;
struct Node{
    int id,total=0,cnt=0,rk;
    int grade[6];
    bool friend operator <(Node a,Node b){
        if(a.total!=b.total)return a.total>b.total;
        else if(a.cnt!=b.cnt)return a.cnt>b.cnt;
        else return a.id<b.id;
    }
};
int main(){
    int user,num,item;
    int score[6];
    cin>>user>>num>>item;
    for(int i=1;i<=num;i++){
        cin>>score[i];
    }
    vector<Node> vec(user+1);
    for(int i=0;i<=user;i++){
        fill(vec[i].grade,vec[i].grade+6,-2);
    }
    for(int i=0;i<item;i++){
        int id,t,grd;
        cin>>id>>t>>grd;
        vec[id].id=id;
        if(grd>vec[id].grade[t])vec[id].grade[t]=grd;
    }
    vector<Node> res;
    for(int i=1;i<=user;i++){
        bool flag=true;
        for(int j=1;j<=num;j++){
            if(vec[i].grade[j]>=0){
                flag=false;
                vec[i].total+=vec[i].grade[j];
                if(vec[i].grade[j]==score[j])vec[i].cnt++;
            }
        }
        if(!flag)res.push_back(vec[i]);
        //else printf("%09d\n",vec[i].id);
    }
    sort(res.begin(),res.end());
    for(int i=0;i<res.size();i++){
        if(i==0)res[i].rk=1;
        else if(res[i].total==res[i-1].total)res[i].rk=res[i-1].rk;
        else res[i].rk=i+1;
        printf("%d %05d %d",res[i].rk,res[i].id,res[i].total);
        for(int j=1;j<=num;j++){
            if(res[i].grade[j]==-2)printf(" -");
            else if(res[i].grade[j]<0)printf(" 0");
            else printf(" %d",res[i].grade[j]);
        }
        printf("\n");

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值