您的位置:首页 > 其它

hdu1263(结构体排序/二维map)

2017-01-06 09:01 344 查看
题目链接:水果

题目大意:给出n笔交易,交易包括水果产地,水果名字和价格,要求按如下格式输出

产地

|----水果名称1(收益)

|----水果名称2(收益)

按字母序排列

题目分析:

做法1:结构体排序

用place和name存储当前的产地和名字,

向后比较,每比较到不同的产地就输出上一个的place和和name

如果比较到相同的产地但名字不同,就输出上一个的名字

记得最后一个要额外输出的输出

#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;

const int maxn=105;
struct node
{
char place[85],name[85];
int p;
bool operator <(const node&n)const
{
if(!strcmp(place,n.place))return strcmp(name,n.name)<0;
else return strcmp(place,n.place)<0;
}
}a[maxn];

int main()
{
//freopen("in.txt","r",stdin);
int T,n,sum;
char name[85],place[85];
scanf("%d",&T);
while(T--){
scanf("%d",&n);
for(int i=0;i<n;i++)scanf("%s %s %d",a[i].name,a[i].place,&a[i].p);
sort(a,a+n);
printf("%s\n",a[0].place);
strcpy(name,a[0].name);
strcpy(place,a[0].place);
sum=a[0].p;
//strcpy(a
.name,"0");
//strcpy(a
.place,"0");
for(int i=1;i<n;i++){
if(strcmp(place,a[i].place)){
printf("   |----%s(%d)\n",name,sum);
strcpy(name,a[i].name);
strcpy(place,a[i].place);
sum=a[i].p;
printf("%s\n",place);
}
else if(!strcmp(place,a[i].place)&&strcmp(name,a[i].name)){
printf("   |----%s(%d)\n",name,sum);
strcpy(name,a[i].name);
sum=a[i].p;
}
else sum+=a[i].p;

}
printf("   |----%s(%d)\n",a[n-1].name,sum);
if(T)printf("\n");
}
return 0;
}


做法2:二维map<strng,map<string,int> >

map<strng,map<string,int> >::it映射相同的place

it2=(it->second).begin()映射到相同的name

记得每次case后m要clear()

#include <stdio.h>
#include <string>
#include <map>
#include <iostream>
using namespace std;

const int maxn=105;

int main()
{
//freopen("in.txt","r",stdin);
int T,n,num,sum;
map<string,map<string,int> >m;
scanf("%d",&T);
string name,place;
while(T--){
scanf("%d",&n);
for(int i=0;i<n;i++){
cin>>name>>place>>num;
m[place][name]+=num;
}
for(map<string,map<string,int> >::iterator it=m.begin();it!=m.end();++it){
cout<<it->first<<endl;
for(map<string,int>::iterator it2=(it->second).begin();it2!=(it->second).end();++it2){
cout<<"   |----"<<it2->first<<"("<<it2->second<<")"<<endl;
}
}
m.clear();
if(T)printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: