解题报告:一个结构体排序的题,用了一个运算符重载,要注意的是不同的地方可能会产相同的水果,一开始没注意。
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\n",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)\n",M[i].f_name,M[i].n); 48 else M[i+1].n += M[i].n; 49 } 50 } 51 return 0; 52 }