[关闭]
@lychee123 2017-03-18T19:52:58.000000Z 字数 2235 阅读 1373

HDU-1263 水果(map的简单运用,字符串排序,结构体二级排序 )

STL 模板


题面链接

  1. #include<stdio.h>
  2. #include<map>///map是一个映射的关系map <A,B>mp A和B是一一对应的关系如果A有多个的话用pair<a1,a2>同理,pair里面还可以有pair
  3. #include<algorithm>
  4. #include<string.h>
  5. using namespace std;
  6. int main()
  7. {
  8. int n,m,i,j,k;
  9. char kind[111],from[111];
  10. int num;
  11. scanf("%d",&n);
  12. while(n--)
  13. {
  14. scanf("%d",&m);
  15. map<pair<string,string>,int> mp;///每次循环重新声明就不需要清空了
  16. for(i=0;i<m;i++)
  17. {
  18. scanf("%s%s%d",kind,from,&num);
  19. mp[make_pair(from,kind)]+=num;///map存数据可以去重和自动排序(从小到大)
  20. }
  21. int l=mp.size();
  22. string tmp="tmp";///用string字符串之间可以直接相等
  23. map<pair<string,string>,int>::iterator it;///声明一个it
  24. for(it=mp.begin();it!=mp.end();it++)
  25. {
  26. if(it->first.first==tmp)
  27. printf(" |----%s(%d)\n",it->first.second.c_str(),it->second);///加.c_str()就可以用printf输出否则要用cout输出
  28. else
  29. {
  30. tmp=it->first.first;
  31. printf("%s\n",it->first.first.c_str());
  32. printf(" |----%s(%d)\n",it->first.second.c_str(),it->second);
  33. }
  34. }
  35. if(n)
  36. printf("\n");
  37. }
  38. return 0;
  39. }
  1. #include<stdio.h>
  2. #include<algorithm>
  3. #include<string.h>
  4. using namespace std;
  5. struct node
  6. {
  7. char name[111];
  8. char from[111];
  9. int num;
  10. }a[111];
  11. int cmp(node a,node b)
  12. {
  13. if(strcmp(a.from,b.from)==0)///strcmp字符串大小比较
  14. return strcmp(a.name,b.name)<0;///如果产地一样就按名字从小到大排序
  15. else
  16. return strcmp(a.from,b.from)<0;///产地不同按产地从小到大排序
  17. }
  18. int main()
  19. {
  20. int n,m,i,j;
  21. scanf("%d",&n);
  22. while(n--)
  23. {
  24. scanf("%d",&m);
  25. for(i=0;i<m;i++)
  26. scanf("%s%s%d",a[i].name,a[i].from,&a[i].num);
  27. sort(a,a+m,cmp);
  28. for(i=m-1;i>0;i--)
  29. {
  30. if((strcmp(a[i].from,a[i-1].from)==0)&&(strcmp(a[i].name,a[i-1].name)==0))
  31. a[i-1].num+=a[i].num;
  32. }
  33. for(i=0;i<m;i++)
  34. {
  35. if(i==0)
  36. {
  37. printf("%s\n",a[i].from);
  38. printf(" |----%s(%d)\n",a[i].name,a[i].num);
  39. continue;
  40. }
  41. if((strcmp(a[i].from,a[i-1].from)==0)&&(strcmp(a[i].name,a[i-1].name)!=0))
  42. printf(" |----%s(%d)\n",a[i].name,a[i].num);
  43. if(strcmp(a[i].from,a[i-1].from)!=0)
  44. {
  45. printf("%s\n",a[i].from);
  46. printf(" |----%s(%d)\n",a[i].name,a[i].num);
  47. }
  48. }
  49. if(n)
  50. printf("\n");
  51. }
  52. return 0;
  53. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注