zoukankan      html  css  js  c++  java
  • 1075 pat judge

    最后一个测试点一直通不过,琢磨了一上午,终于找出bug

    主要原因:考生k的第一个成绩是-1的情况,应将这项成绩记下,至于k是否所有提交的成绩都是-1,通过设置成员变量AC来判断,AC为true,写入vector参加后续排序,AC为false,不写入vector不参加后续排序。

    AC代码:

    #include <algorithm>
    #include <vector>
    #include <map>
    #include <cstdio>
    using namespace std;
    class pat{
    public:
        bool ac;
        int id;
        map<int,int> score;
        int sum;
        int rank;
        int perfect;
        pat(){sum = 0;ac = false;perfect = 0;};
    };
    bool operator<(const pat& a,const pat& b){
        if(a.ac && !b.ac){
            return true;
        }
        else if(!a.ac)
            return false;
        else{
            if(a.sum != b.sum){
                return a.sum > b.sum;
            }
            else{
                if(a.perfect != b.perfect)
                    return a.perfect > b.perfect;
                else
                    return a.id < b.id;
            }
        }
    }
    int main(){
        int n,k,m;
        scanf("%d %d %d",&n,&k,&m);
        vector<int> s(k+1);
        map<int,pat> list;
        for(int i = 0;i < k;i++){
            int ps;
            scanf("%d",&ps);
            s[i+1] = ps;
        }
        for(int i = 0;i < m;i++){
            int id,pid,ps;
            scanf("%d %d %d",&id,&pid,&ps);
            if(ps != -1){
                if(list.find(id) == list.end() || list[id].score.find(pid) == list[id].score.end() || list[id].score[pid] < ps){
                    list[id].id = id;
                    list[id].ac = true;
                    /*if(list[id].score.find(pid) != list[id].score.end()){
                        list[id].sum -= list[id].score[pid];
                        list[id].sum += ps;
                    }
                    else{
                        list[id].sum += ps;
                    }*/
                    list[id].score[pid] = ps;
                    if(ps == s[pid]){
                        list[id].perfect++;
                    }
                }
            }
            else{
                if(list.find(id) == list.end() || list[id].score.find(pid) == list[id].score.end()){
                    list[id].id = id;
                    list[id].score[pid] = 0;
                }
            }
        }
        vector<pat> ret;
        for(map<int,pat>::iterator ite = list.begin();ite != list.end();ite++){
            if(!ite->second.ac)
                continue;
            ret.push_back(ite->second);
            for(int j = 1;j <= k;j++){
                if(ret.back().score.find(j) != ret.back().score.end())
                    ret.back().sum += ret.back().score[j];
            }
        }
        sort(ret.begin(),ret.end());
        for(int i = 0;i < ret.size();i++){
            if(!ret[i].ac)
                continue;
            if(i == 0){
                printf("1 %05d %d",ret[i].id,ret[i].sum);
                ret[i].rank = 1;
                for(int j = 1;j <= k;j++){
                    if(ret[i].score.find(j) == ret[i].score.end()){
                        printf(" -");
                    }
                    else{
                        printf(" %d",ret[i].score[j]);
                    }
                }
                printf("
    ");
            }
            else{
                if(ret[i].sum == ret[i-1].sum)
                    ret[i].rank = ret[i-1].rank;
                else
                    ret[i].rank = i+1;
                printf("%d %05d %d",ret[i].rank,ret[i].id,ret[i].sum);
                for(int j = 1;j <= k;j++){
                    if(ret[i].score.find(j) == ret[i].score.end()){
                        printf(" -");
                    }
                    else{
                        printf(" %d",ret[i].score[j]);
                    }
                }
                printf("
    ");
            }
        }
        return 0;
    }
  • 相关阅读:
    开发常见错误之 :Missing artifact com.sun:tools:jar 1.7.0
    开发常见错误之 : Detected both log4j-over-slf4j.jar AND slf4j-log4j12.jar
    kafka集群部署
    kafka
    Oracle 学习之触发器
    CloudSetuper
    erlang :打开界面工具的命令
    erlang 二进制中 拼接 变量或者函数 报错
    Python内部机制。
    AOP (面向切面编程)
  • 原文地址:https://www.cnblogs.com/Aldorado/p/5257520.html
Copyright © 2011-2022 走看看