思路:按优先级进行两次排序;
输出排序后的第一个产地,然后进行一次for循环,每一次都与前面相比较,重点在最后一个。
AC代码如下:
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
struct f
{
char x[81];
char y[81];
int z;
}t;
int a,c,b,sum,mn=9999999;
int main()
{
scanf("%d",&a);
while(a--)
{
scanf("%d",&b);
struct f v[b];
for(int i=0;i<b;i++)
{
scanf("%s%s%d",&v[i].x,&v[i].y,&v[i].z);
}
for(int i=0;i<b;i++)
{
for(int j=0;j<b;j++)
{
if(strcmp(v[i].y,v[j].y)<0)
{
t=v[i];
v[i]=v[j];
v[j]=t;
}
else if(strcmp(v[i].y,v[j].y)==0)
{
if(strcmp(v[i].x,v[j].x)<0)
{
t=v[i];
v[i]=v[j];
v[j]=t;
}
}
}
}
printf("%s\n",v[0].y);
for(int i=1;i<b;i++)
{
if(strcmp(v[i].y,v[i-1].y)==0)
{
if(strcmp(v[i].x,v[i-1].x)==0)
{
v[i].z=v[i].z+v[i-1].z;
if(i==b-1)
{
printf(" |----%s(%d)\n",v[i].x,v[i].z);
}
}
else
{
printf(" |----%s(%d)\n",v[i-1].x,v[i-1].z);
if(i==b-1)
{
printf(" |----%s(%d)\n",v[i].x,v[i].z);
}
}
}
else
{
printf(" |----%s(%d)\n",v[i-1].x,v[i-1].z);
printf("%s\n",v[i].y);
if(i==b-1)
{
printf(" |----%s(%d)\n",v[i].x,v[i].z);
}
}
}
if(a!=0)
{
printf("\n");
}
}
}