hdu 1263 水果 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1263
题目分析:用结构体嵌套结构存,在两级分别定义计数器记下当前元素个数,二级排序变为二层排序(第二层多次)。
code:
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct fru
{
char fn[110];
int num;
};
struct dis
{
char dn[90];
int cnt;//当前水果种类
fru f[110];
}mes[110];
int discmp(dis a,dis b)
{
return strcmp(a.dn,b.dn)<0;
}
int frucmp(fru a,fru b)
{
return strcmp(a.fn,b.fn)<0;
}
void assign(char*s,char*temp)
{
s[0]=0;
strcpy(s,temp);
}
int main()
{
int i,j,m,n,t,number;//m为当前产地数
scanf("%d",&t);
char place[110],fruit[110];
while(t--)
{
m=0;
scanf("%d",&n);
while(n--)
{
scanf("%s%s%d",fruit,place,&number);
for(i=0;i<m;i++)
{
if(!strcmp(mes[i].dn,place))
{
for(j=0;j<mes[i].cnt;j++)
{
if(!strcmp(mes[i].f[j].fn,fruit))
{
mes[i].f[j].num+=number;
break;
}
}
if(j==mes[i].cnt)
{
assign(mes[i].f[j].fn,fruit);
mes[i].f[j].num=number;
mes[i].cnt++;
}
break;
}
}
if(i==m)
{
assign(mes[i].dn,place);
mes[i].cnt=1;
assign(mes[i].f[0].fn,fruit);
mes[i].f[0].num=number;
m++;
}
}
sort(mes,mes+m,discmp);
for(i=0;i<m;i++)
{
sort(mes[i].f,mes[i].f+mes[i].cnt,frucmp);
printf("%s\n",mes[i].dn);
for(j=0;j<mes[i].cnt;j++)
{
printf(" |----%s(%d)\n",mes[i].f[j].fn,mes[i].f[j].num);
}
}
if(t)putchar('\n');
}
return 0;
}
PS:1A水过。