HDU 1263 水果 结构体排序

解题报告:一个结构体排序的题,用了一个运算符重载,要注意的是不同的地方可能会产相同的水果,一开始没注意。

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 #include<algorithm>
 5 using namespace std;
 6 struct node {
 7     char f_name[85],loc_name[85];
 8     int n;
 9     friend bool operator < (node a,node b) {
10         int len1 = strlen(a.loc_name);
11         int len2 = strlen(b.loc_name);
12         int M = max(len1,len2),i = 0;
13         while(i < M) {
14             if(a.loc_name[i] != b.loc_name[i])
15             return a.loc_name[i] < b.loc_name[i];
16             i++;
17         }
18         len1 = strlen(a.f_name);
19         len2 = strlen(b.f_name);
20         M = max(len1,len2),i = 0;
21         while(i < M) {
22             if(a.f_name[i] != b.f_name[i])
23             return a.f_name[i] < b.f_name[i];
24             i++;
25         }
26         return 0;
27     }
28 };
29 int main() {
30     int T,N,flag = 0;
31     scanf("%d",&T);
32     while(T--) {
33         node M[105];
34         if(flag)
35         puts("");
36         flag = 1;
37         scanf("%d",&N);
38         M[0].f_name[0] = M[0].loc_name[0] = M[N+1].f_name[0] = M[N+1].loc_name[0] = NULL;
39         M[0].n = M[N+1].n = 0;
40         for(int i = 1;i <= N;++i)
41         scanf("%s%s%d",M[i].f_name,M[i].loc_name,&M[i].n);
42         sort(M+1,M+N+1);
43         for(int i = 1;i <= N;++i) {
44               if(strcmp(M[i].loc_name,M[i-1].loc_name))
45               printf("%s
",M[i].loc_name);
46               if(strcmp(M[i].loc_name,M[i+1].loc_name) || strcmp(M[i].f_name,M[i+1].f_name))
47               printf("   |----%s(%d)
",M[i].f_name,M[i].n);
48               else M[i+1].n += M[i].n;
49         }
50     }
51     return 0;
52 }
View Code
原文地址:https://www.cnblogs.com/xiaxiaosheng/p/3265742.html