PAT 1028

题目 : List Sorting

分值 : 25
难度 : 简单题
思路 : 结构体排序
坑点 : 最大的坑点有个点cin cout组合超时,要用scanf printf组合
评语 : scanf 和 char[]的搭配了解一下

具体代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std ;
typedef struct Node{
char id[10];
char name[10];
int score;
}Nodes ;
Nodes data[100001] ;
bool cmp1(Node a , Node b)
{
return strcmp(a.id, b.id) < 0;
}
bool cmp2(Node a , Node b)
{
if(!strcmp(a.name, b.name))
return strcmp(a.id, b.id) < 0;
return strcmp(a.name, b.name) < 0;
}

bool cmp3(Node a , Node b)
{
if(a.score ==b.score)
return strcmp(a.id, b.id) < 0;
return b.score > a.score ;
}
int main() {
int N , C;
cin >> N >> C ;
for(int i = 0 ; i< N ;i++)
{

//in>>data[i].id >>data[i].name ;
scanf("%s %s %d", data[i].id ,data[i].name , &data[i].score );
}
if(C==1)sort(data,data+N ,cmp1);
if(C==2)sort(data,data+N ,cmp2);
if(C==3)sort(data,data+N ,cmp3) ;
for(int i = 0 ;i< N ; i++)
printf("%s %s %d\n",data[i].id ,data[i].name ,data[i].score);
return 0;
}
}