考試排名php
1 #include<iostream>
2 #include<cstring>
3 #include<cstdio>
4 #include<cmath>
5 #include<algorithm>
6 #include<map>
7 #include<set>
8 #include<vector>
9 #include<queue>
10 using namespace std; 11 #define ll long long
12 const int mod=1e9+7; 13 const int inf=1e9+7; 14
15 typedef struct
16 { 17 string name;//名字
18 int AC;//AC題數
19 int penalty;//罰時
20 } St; 21
22 vector<St>v;//考慮到人數不肯定,用不定長結構體數組(STl真香)
23
24 bool cmp(const St &a,const St &b)//按題意寫cmp函數
25 { 26 if(a.AC!=b.AC)//AC題數不一樣
27 return a.AC > b.AC;//題數多排名前
28 else//AC題數相同
29 { 30 if(a.penalty!=b.penalty)//罰時不一樣
31 return a.penalty < b.penalty;//罰時少排名前
32 else//罰時相同
33 return a.name < b.name;//名字字典序小排名前(講道理應該並列吧orzorz)
34 } 35 } 36
37 int main() 38 { 39 //ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
40
41 int n,time;//n個題,罰時
42
43 cin>>n>>time; 44
45 string id;//名字
46
47 St now;//定義一個結構體記錄每次輸入一我的名數據
48 string str;//對n個題的狀況處理
49
50 while(cin>>id)//這樣寫讀到文件尾EOF會退出循環,本身debug能夠摁ctrl+z手動退出
51 { 52 now.name=id;//存名字
53 int ans=0;//計算罰時
54 int ac=0;//計算AC數
55 for(int i=0;i<n;i++) 56 { 57 cin>>str;//讀入每一個題狀況
58 if(str[0]=='-'||str=="0")//沒作出||沒作,直接跳過
59 continue; 60 ac++;//不然確定AC了
61 if(str.find("(")!=-1)//找到括號
62 { 63 int place1=str.find("("); 64 int place2=str.find(")"); 65 ans+=stoi(str.substr(0,place1));//計算兩個罰時
66 ans+=stoi(str.substr(place1+1,place2-place1-1))*time; 67 } 68 else
69 { 70 ans+=stoi(str);//無括號一個罰時
71 } 72 } 73 now.AC=ac;//存AC數
74 now.penalty=ans;//存罰時
75 v.push_back(now);//導入結構體數組
76 } 77
78 sort(v.begin(),v.end(),cmp);//按題意排序
79
80 for(int i=0;i<v.size();i++) 81 { //格式輸出
82 printf("%-10s %2d %4d\n",v[i].name.c_str(),v[i].AC,v[i].penalty); 83 } 84
85 return 0; 86 }