1. 程式人生 > >G - EXCEL排序 hdu1424

G - EXCEL排序 hdu1424

++ while rdquo head b2c use inner 沒有 試用

G - EXCEL排序

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 128000/64000 KB (Java/Others) Submit Status

Problem Description

Excel可以對一組紀錄按任意指定列排序。現請你編寫程序實現類似功能。

Input

測試輸入包含若幹測試用例。每個測試用例的第1行包含兩個整數 N (<=1000) 和 C,其中 N 是紀錄的條數,C 是指定排序的列號。以下有 N
行,每行包含一條學生紀錄。每條學生紀錄由學號(6位數字,同組測試中沒有重復的學號)、姓名(不超過8位且不包含空格的字符串)
、成績(閉區間[0, 100]內的整數)組成,每個項目間用1個空格隔開。當讀到 N=0 時,全部輸入結束,相應的結果不要輸出。

Output

對每個測試用例,首先輸出1行“Case i:”,其中 i 是測試用例的編號(從1開始)。隨後在 N 行中輸出按要求排序後的結果,即:當 C=1 時,按學號遞增排序;當 C=2時,按姓名的非遞減字典序排序;當 C=3 時,按成績的非遞減排序。當若幹學生具有相同姓名或者相同成績時,則按他們的學號遞增排序。

Sample Input

3 1
000007 James 85
000010 Amy 90
000001 Zoe 60
4 2
000007 James 85
000010 Amy 90
000001 Zoe 60
000002 James 98
4 3
000007 James 85
000010 Amy 90
000001 Zoe 60
000002 James 90
0 0

Sample Output

Case 1:
000001 Zoe 60
000007 James 85
000010 Amy 90
Case 2:
000010 Amy 90
000002 James 98
000007 James 85
000001 Zoe 60
Case 3:
000001 Zoe 60
000007 James 85
000002 James 90
000010 Amy 90

技術分享
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long LL;
 4 const int N=1e5+10;
 5 const int INF=0x3f3f3f3f;
6 int cas=1,T; 7 int n,c; 8 struct stu 9 { 10 char name[9]; 11 int grade,num; 12 void scan() { scanf("%d%s%d",&num,name,&grade); } 13 void print() { printf("%06d %s %d\n",num,name,grade); } 14 }a[N]; 15 bool cmp1(const stu&a,const stu&b) 16 { 17 return a.num<b.num; 18 } 19 bool cmp2(const stu&a,const stu&b) 20 { 21 int x=strcmp(a.name,b.name); 22 return x<0 || x==0 && a.num<b.num; 23 } 24 bool cmp3(const stu&a,const stu&b) 25 { 26 return a.grade<b.grade || a.grade==b.grade && a.num<b.num; 27 } 28 int main() 29 { 30 // freopen("1.in","w",stdout); 31 // freopen("1.in","r",stdin); 32 // freopen("1.out","w",stdout); 33 // scanf("%d",&T); 34 while(scanf("%d%d",&n,&c)==2&&n) 35 { 36 for(int i=0;i<n;i++) a[i].scan(); 37 switch(c) 38 { 39 case 1:sort(a,a+n,cmp1);break; 40 case 2:sort(a,a+n,cmp2);break; 41 case 3:sort(a,a+n,cmp3);break; 42 } 43 printf("Case %d:\n",cas++); 44 for(int i=0;i<n;i++) a[i].print(); 45 } 46 // printf("time=%.3lf\n",(double)clock()/CLOCKS_PER_SEC); 47 return 0; 48 }
solve.cpp

題解:

sort + 3個cmp

G - EXCEL排序 hdu1424