B1075 PAT Judge(模擬PAT排名)

B1075 PAT Judge (25分)

//debug調(diào)好久亩鬼。击费。蝗蛙。

  • For those who has never submitted any solution that can pass the compiler, or has never submitted any solution, they must NOT be shown on the ranklist.
    對于從未提交過任何可以通過編譯器的解決方案或從未提交過任何解決方案的人蚜厉,它們不能顯示在ranklist上揪漩。

ranklist里各題顯示0分兩種情況

  • 一是提交了代碼得不到分數(shù)算0分
  • 二是編譯不通過-1顯示0分

所以不能以總分為0分去判斷是否要顯示,因為有可能都是編譯不通過,但只要提交過一次>=0的分數(shù)就能顯示乘陪。


每個人的每道題的提交情況都單獨拿出统台,從中取每道題的最高成績

  • If a user has submitted several solutions to solve one problem, then the highest score will be counted.
    如果用戶提交了多個解決方案來解決一個問題,則將計算最高分數(shù)啡邑。

排序避開了這個問題贱勃。
最后一個測試樣例是有一個人一開始得到了分數(shù),后來提交了一次沒有通過編譯器的谤逼,不能產(chǎn)生覆蓋

  • For those who have the same rank, users must be sorted in nonincreasing order according to the number of perfectly solved problems.

排序也比避開了這個問題
同一道題的完美解決數(shù)不會隨多交幾次AC的次數(shù)變多贵扰。

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string.h>
#include <cmath>
#include <math.h>
#include <vector>
#include <queue>
#include <map>
#include <set>
#include <stack>
using namespace std;
typedef long long ll;
const int MAX=10005;
const int INF=0x3f3f3f3f;
const int mod=1000000007;
struct nodeper
{
    int userid;
    int num;
    int total;
    int Sumbit;
    int score;
    int Rank;
    int accept;
}temp;
int score[MAX];
int book[MAX];
int mp[MAX][11];
int idtonum[MAX][11];
int submit[MAX];
map<int,int>tol;
map<int,int>ac;
vector<nodeper>vt[MAX];
bool cmp(nodeper a,nodeper b)
{
    if(a.num!=b.num)
        return a.num<b.num;
    else if(a.score!=b.score)
        return a.score>b.score;
}
bool cmp2(nodeper a,nodeper b)
{
    if(a.total!=b.total)
        return a.total>b.total;
    else if(a.accept!=b.accept)
        return a.accept>b.accept;
    else
        return a.userid<b.userid;
}
int main()
{
    int n,k,m;
    scanf("%d%d%d",&n,&k,&m);
    memset(idtonum,0,sizeof(idtonum));
    memset(submit,0,sizeof(submit));
    for(int i=1;i<=k;i++)
    {
      scanf("%d",&score[i]);
    }
    for(int i=0;i<m;i++)
    {
       int id,num,score;
       scanf("%d%d%d",&id,&num,&score);
       temp.num=num;
       temp.score=score;
       temp.userid=id;
       vt[id].push_back(temp);
    }
    for(int i=1;i<=n;i++)
    {
      memset(book,0,sizeof(book));
      sort(vt[i].begin(),vt[i].end(),cmp);
      for(int j=0;j<vt[i].size();j++)
      {
          if(book[vt[i][j].num]==0)
          {
              if(vt[i][j].score==score[vt[i][j].num])
              {
                  ac[vt[i][j].userid]++;
              }
              if(vt[i][j].score>=0)
              {
                  submit[vt[i][j].userid]=1;
              }
              else if(vt[i][j].score==-1)
                  vt[i][j].score=0;
              mp[vt[i][j].userid][vt[i][j].num]=vt[i][j].score;
              tol[vt[i][j].userid]+=vt[i][j].score;
              idtonum[vt[i][j].userid][vt[i][j].num]=1;
              book[vt[i][j].num]=1;
          }
      }
    }
    vector<nodeper>st;
    for(int i=1;i<=n;i++)
    {
     nodeper res;
     res.userid=i;
     res.Sumbit=submit[i];
     res.total=tol[i];
     res.accept=ac[i];
     st.push_back(res);
    }
     sort(st.begin(),st.end(),cmp2);
     for(int i=0;i<st.size();i++)
     {
         if(st[i].Sumbit==1)
         {
           if(i==0)
           {
               st[i].Rank=1;
               cout<<"1";
           }
           else
           {
             if(st[i].total==st[i-1].total)
             {
                 st[i].Rank=st[i-1].Rank;
                 cout<<st[i].Rank;
             }
             else
             {
                 st[i].Rank=i+1;
                 cout<<i+1;
             }
            }
             printf(" %05d",st[i].userid);
             cout<<" "<<st[i].total;
             for(int j=1;j<=k;j++)
             {
                 if(idtonum[st[i].userid][j]==0)
                    cout<<" -";
                 else
                    cout<<" "<<mp[st[i].userid][j];
             }
             cout<<endl;
         }
     }
    return 0;
}
解決了就好

大佬的學習代碼

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct node {
    int rank, id, total = 0;
    vector<int> score;
    int passnum = 0;
    bool isshown = false;
};
bool cmp1(node a, node b) {
    if(a.total != b.total)
        return a.total > b.total;
    else if(a.passnum != b.passnum)
        return a.passnum > b.passnum;
    else
        return a.id < b.id;
}
 
 
int main() {
    int n, k, m, id, num, score;
    scanf("%d %d %d", &n, &k, &m);
    vector<node> v(n + 1);
    for(int i = 1; i <= n; i++)
        v[i].score.resize(k + 1, -1);
    vector<int> full(k + 1);
    for(int i = 1; i <= k; i++)
        scanf("%d", &full[i]);
    for(int i = 0; i < m; i++) {
        scanf("%d %d %d", &id, &num, &score);
        v[id].id = id;
        v[id].score[num] = max(v[id].score[num], score);
        if(score != -1)
            v[id].isshown = true;
        else if(v[id].score[num] == -1)
            v[id].score[num] = -2;
    }
    for(int i = 1; i <= n; i++) {
        for(int j = 1; j <= k; j++) {
            if(v[i].score[j] != -1 && v[i].score[j] != -2)
                v[i].total += v[i].score[j];
            if(v[i].score[j] == full[j])
                v[i].passnum++;
        }
    }
    sort(v.begin() + 1, v.end(), cmp1);
    for(int i = 1; i <= n; i++) {
        v[i].rank = i;
        if(i != 1 && v[i].total == v[i - 1].total)
            v[i].rank = v[i - 1].rank;
    }
    for(int i = 1; i <= n; i++) {
        if(v[i].isshown == true) {
            printf("%d %05d %d", v[i].rank, v[i].id, v[i].total);
            for(int j = 1; j <= k; j++) {
                if(v[i].score[j] != -1 && v[i].score[j] != -2)
                    printf(" %d", v[i].score[j]);
                else if(v[i].score[j] == -1)
                    printf(" -");
                else
                    printf(" 0");
            }
            printf("\n");
        }
    }
    return 0;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市流部,隨后出現(xiàn)的幾起案子戚绕,更是在濱河造成了極大的恐慌,老刑警劉巖枝冀,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件舞丛,死亡現(xiàn)場離奇詭異,居然都是意外死亡宾茂,警方通過查閱死者的電腦和手機瓷马,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來跨晴,“玉大人欧聘,你說我怎么就攤上這事《伺瑁” “怎么了怀骤?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長焕妙。 經(jīng)常有香客問我蒋伦,道長,這世上最難降的妖魔是什么焚鹊? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任痕届,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘研叫。我一直安慰自己锤窑,他們只是感情好,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布嚷炉。 她就那樣靜靜地躺著渊啰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪申屹。 梳的紋絲不亂的頭發(fā)上绘证,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天,我揣著相機與錄音哗讥,去河邊找鬼嚷那。 笑死,一個胖子當著我的面吹牛忌栅,可吹牛的內(nèi)容都是我干的车酣。 我是一名探鬼主播曲稼,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼索绪,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了贫悄?” 一聲冷哼從身側(cè)響起瑞驱,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎窄坦,沒想到半個月后唤反,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡鸭津,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年彤侍,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逆趋。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡盏阶,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出闻书,到底是詐尸還是另有隱情名斟,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布魄眉,位于F島的核電站砰盐,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏坑律。R本人自食惡果不足惜岩梳,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧冀值,春花似錦淘捡、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至作彤,卻和暖如春膘魄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背竭讳。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工创葡, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人绢慢。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓灿渴,卻偏偏與公主長得像,于是被迫代替她去往敵國和親胰舆。 傳聞我的和親對象是個殘疾皇子骚露,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 一篇引導(dǎo)孩子學習的文字。 幾年前有一天缚窿,我的老板棘幸,有一天突然給我消息,下班后別走倦零,我有事误续。心上心下都忐忑了,因為我...
    海狼_9797閱讀 294評論 0 0
  • 要交作業(yè)了扫茅,依然想不到要寫什么蹋嵌。然后想想,明天要結(jié)婚葫隙,還是說點和結(jié)婚有關(guān)的話題吧栽烂。今天晚上跟哥哥、嫂子停蕉、表妹一...
    ea41e0427fde閱讀 132評論 0 0
  • 有些人是活在回憶里愕鼓,春風微微吹動記憶的匣子,夏日灼烈的陽光抹去潮濕的味道慧起,秋葉飄落撫慰匣子的情愫菇晃,沉默于冬日皚皚白...
    sonmus_cc6c閱讀 450評論 0 0
  • 很多時候我都在問我自己 我是來干什么的,我以前的夢想了估灿。 大學之前崇呵,忙,忙著看書馅袁,忙著寫第二天的作業(yè)域慷,早上忙要讀單...
    小柿子_ff36閱讀 333評論 0 0
  • 新浪新聞的API:1.訪問手機新浪網(wǎng)https://sina.cn/?from=sinacom(可以從新浪新聞的首...
    ustcmio閱讀 7,565評論 2 8