hdu1263(结构体排序/二维map)
2017-01-06 09:01
344 查看
题目链接:水果
题目大意:给出n笔交易,交易包括水果产地,水果名字和价格,要求按如下格式输出
产地
|----水果名称1(收益)
|----水果名称2(收益)
按字母序排列
题目分析:
做法1:结构体排序
用place和name存储当前的产地和名字,
向后比较,每比较到不同的产地就输出上一个的place和和name
如果比较到相同的产地但名字不同,就输出上一个的名字
记得最后一个要额外输出的输出
做法2:二维map<strng,map<string,int> >
map<strng,map<string,int> >::it映射相同的place
it2=(it->second).begin()映射到相同的name
记得每次case后m要clear()
题目大意:给出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; }
相关文章推荐
- 利用栈结构求取后缀表达式的值
- 写给2017年,回顾2016
- printk函数日志级别的设置【转】
- 线性代数杂谈
- Hadoop步骤 openSUSE 42
- Java 8系列之重新认识HashMap
- 菜单开源库装逼大全
- Linux内核链表深度分析【转】
- TestLink的日志实现
- Makefile、Kconfig与.config文件的再次理解
- openSuse SSH服务防火墙关闭
- 17 - 02 - 07 计算机网络(28)(http协议简述)
- BSTR向WideString赋值导致内存泄漏
- Android Studio 调试技巧
- new生成二维数组
- 团队作业week16
- ubuntu 安装升级java版本
- iOS UIAlertController警告框 添加输入框
- node.js发送邮件email的方法详解
- getWindow.setFlags()