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

来源:互联网 发布:中国大数据企业50强 编辑:程序博客网 时间:2024/05/16 10:56

题目链接:水果

题目大意:给出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[n].name,"0");        //strcpy(a[n].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;}


0 0
原创粉丝点击