1. 程式人生 > >JustOj 2039: 成績排名 (結構體排序)

JustOj 2039: 成績排名 (結構體排序)

string typedef node 感覺 pac 自己 lib esp 3.1

題目描述

每次期末考試成績出來之前的一段時間大豪哥心裏都是痛苦的,總感覺自己會在班上排名特別差。所以當成績出來以後大豪哥想快點知道班上的總排名,以便知道自己的排名。(PS:大豪哥班上有個學霸名叫日天,又名泰迪,不要問我為什麽,因為泰迪的行為決定的)

輸入

多組測試數據,至文件結尾。
先輸入每個班上有n個同學,這個學期有m門課程(1<=n,m<=100)
接下來有n行,每行的輸入格式為學號id,姓名name,課程成績k1,課程成績k2... ,課程成績km.(學號在int型範圍以內,0<=ki<=100,姓名長度在20個字符以下)

輸出

輸出班上每個同學排名,並輸出總分及排名(如果總分相同就按學號從小到大輸出,但是排名還是相同的)輸出格式見樣例

樣例輸入
4 4
1 Taidi 100 100 90 90
2 Dahaoge 60 60 70 60
3 Yeshen 90 90 100 100
4 Wangpangzi 50 60 100 80
樣例輸出
1 Taidi 100 100 90 90 Sum = 380 Ranking = 1
3 Yeshen 90 90 100 100 Sum = 380 Ranking = 1
4 Wangpangzi 50 60 100 80 Sum = 290 Ranking = 3
2 Dahaoge 60 60 70 60 Sum = 250 Ranking = 4

題解:結構體排序
 1 #include <iostream>
 2
#include <algorithm> 3 #include <cstring> 4 #include <cstdio> 5 #include <vector> 6 #include <cstdlib> 7 #include <iomanip> 8 #include <cmath> 9 #include <ctime> 10 #include <map> 11 #include <set> 12 #include <queue> 13
using namespace std; 14 #define lowbit(x) (x&(-x)) 15 #define max(x,y) (x>y?x:y) 16 #define min(x,y) (x<y?x:y) 17 #define MAX 100000000000000000 18 #define MOD 1000000007 19 #define pi acos(-1.0) 20 #define ei exp(1) 21 #define PI 3.141592653589793238462 22 #define INF 0x3f3f3f3f3f 23 #define mem(a) (memset(a,0,sizeof(a))) 24 typedef long long ll; 25 ll gcd(ll a,ll b){ 26 return b?gcd(b,a%b):a; 27 } 28 const int N=110; 29 const int mod=1e9+7; 30 struct node 31 { 32 int id; 33 string name; 34 int grade[N]; 35 int sum; 36 }stu[N]; 37 bool cmp(node a,node b) 38 { 39 if(a.sum==b.sum) 40 return a.id<b.id; 41 return a.sum>b.sum; 42 } 43 int main() 44 { 45 int n,m,num; 46 cin.sync_with_stdio(false); 47 while(cin>>n>>m){ 48 for(int i=0;i<n;i++){ 49 cin>>stu[i].id>>stu[i].name; 50 stu[i].sum=0; 51 for(int j=0;j<m;j++){ 52 cin>>stu[i].grade[j]; 53 stu[i].sum+=stu[i].grade[j]; 54 } 55 } 56 sort(stu,stu+n,cmp); 57 for(int i=0;i<n;i++){ 58 cout<<stu[i].id<<" "<<stu[i].name; 59 for(int j=0;j<m;j++){ 60 cout<<" "<<stu[i].grade[j]; 61 } 62 if(i==0) num=1; 63 else if(stu[i].sum!=stu[i-1].sum) 64 num=i+1; 65 cout<<" Sum = "<<stu[i].sum<<" Ranking = "<<num<<endl; 66 } 67 } 68 return 0; 69 }

JustOj 2039: 成績排名 (結構體排序)