A1075.PAT Judge
生活随笔
收集整理的這篇文章主要介紹了
A1075.PAT Judge
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題意
輸入k個程序的每個程序的滿分分數,再輸入m條用戶提交的記錄。按要求進行分數的排序最后輸出。是一道結構體的復雜排序
思路分析
首先明確本題的輸出要求:
- 編譯失敗的提交分數為-1。
- 只有至少成功提交過一次程序(沒有編譯失敗),的用戶才會被排序。可以通過在結構體中設置一個bool isshown標志實現,當輸入的grade != -1時,則isshown設置為true。
- 要求輸出得失每條程序的最高的提交分數,可以邊輸入邊更新該程序的最高分
- 對于排序中的用戶,如果編譯失敗,則該提交對應的程序分數為0,而沒有提交的程序,即輸出-。
- cmp按照總分從高到低排序,總分相等時按照完整解決程序個數排序,解決個數相等時,按照id從小到大。
結構體的寫法:按照所需輸出的要求,結構體應寫成如下形式
細節性太多,直接看代碼吧。
參考代碼:
#include <bits/stdc++.h> using namespace std; const int maxn = 1e4+10; int a[6]; struct record{int user,id,ranked,num,total;int grade[6]; //各科分數bool isshown = false; //默認為false表示沒有成功的提交 }rec[maxn]; int n,k,m;bool cmp(const record &a,const record &b) {if(a.total != b.total) return a.total > b.total;else if(a.num != b.num) return a.num > b.num;else return a.user < b.user; }int main(void) {int user,id,grade;cin>>n>>k>>m;for(int i = 1;i <= k;i++) scanf("%d",&a[i]);for(int i = 1;i <= n;i++) fill(rec[i].grade,rec[i].grade+6,-2); //-2代表所有程序未提交 for(int i = 0;i < m;i++) {scanf("%05d %d %d",&user,&id,&grade);rec[user].user = user; //注意此處的寫法是rec[user]而不是rec[i]。 rec[user].grade[id] = max(rec[user].grade[id],grade); //更新對應程序的最高分 if(grade != -1) rec[user].isshown = true; //出現了分數不為-1,則設置標記 }//遍歷所有的用戶,獲得總分數以及完整通過程序的個數numfor(int i = 1;i <= n;i++) {for(int j = 1;j <= k;j++) {if(rec[i].grade[j] != -1 && rec[i].grade[j] != -2) //提交了并且編譯通過則加到總分中 rec[i].total += rec[i].grade[j];if(rec[i].grade[j] == a[j]) rec[i].num++; //如果是滿分,則完整通過個數+1 }}//獲得排名 sort(rec+1,rec+1+n,cmp);rec[1].ranked = 1;for(int i = 2;i <= n;i++) {if(rec[i].total == rec[i-1].total) rec[i].ranked = rec[i-1].ranked;else rec[i].ranked = i;}for(int i = 1;i <= n;i++) {if(rec[i].isshown == true) {printf("%d %05d %d ",rec[i].ranked,rec[i].user,rec[i].total);for(int j = 1;j <= k;j++) {if(j > 1) cout<<" ";if(rec[i].grade[j] == -1) cout<<"0";else if(rec[i].grade[j] == -2) cout<<"-";else cout<<rec[i].grade[j];}cout<<endl;}}return 0; }轉載于:https://www.cnblogs.com/Western-Trail/p/10362956.html
總結
以上是生活随笔為你收集整理的A1075.PAT Judge的全部內容,希望文章能夠幫你解決所遇到的問題。