zoukankan      html  css  js  c++  java
  • HDU 1263 水果

    http://acm.hdu.edu.cn/showproblem.php?pid=1263

    第一题就这么的 令 (rang) 人 难 (tu) 忘 (xue)。。。

    //有错误请您大力指出,谢谢~

    主要是map的嵌套,定义了一个map < string, map < string, int >  > fru;

    分别用来对应水果名称、产地、数量。

    这里刚接触,不太懂。不过觉得这种嵌套的用法十分类似与二级指针。

    定义部分是这样的:

    map<string, map<string, int> > mp1;         //一个总的
    map<string, map<string, int> >::iterator ite1;  //迭代器 1号
    map<string, int> mp2;                 //用来调用嵌套的
    map<string, int>::iterator ite2;          //指向嵌套 迭代器 2号

    因为输入是两个字符串加一个整数

     int num;
     string s1, s2;
     cin>>s1>>s2>>num;
     mp1[s2][s1]+=num;
    View Code

    这里 mp1 [ s1 ] [ s2 ]大概可以类比着二级指针看吧,也就是二维数组的感觉。

    让某个地区"s2"对应的水果 "s1" 数量对应增加。而map初始化就是0,所以直接用。

    然后是输出。

    外层循环就是很普通的按照 map 的 "key"遍历。

    for(ite1=mp1.begin(); ite1!=mp1.end(); ite1++)
    View Code

    内层输出水果名称和地区时,让 ite2 指向 mp1 中 second 的 "key" ,并遍历。

    然后让 ite2 输出指向的第二部分中的一、二部分。

        for(ite2=(ite1->second).begirangn(); ite2!=(ite1->second).end(); ite2++){
                    cout<<"   |----"<<ite2->first<<'('<<ite2->second<<')'<<'
    ';
               }
    View Code

    最后根据循环控制变量 t 来判断是否换行。

    完整代码:

     1 #include <cmath>
     2 #include <cstdio>
     3 #include <cstdlib>
     4 #include <cstring>
     5 #include <climits>
     6 #include <map>
     7 #include <set>
     8 #include <queue>
     9 #include <stack>
    10 #include <vector>
    11 #include <string>
    12 #include <iostream>
    13 #include <algorithm>
    14 
    15 #define N 100010
    16 
    17 using namespace std;
    18 
    19 typedef long long int ll;
    20 
    21 map<string, map<string, int> > mp1;
    22 map<string, map<string, int> >::iterator ite1;
    23 map<string, int> mp2;
    24 map<string, int>::iterator ite2;
    25 
    26 int main()
    27 {
    28     int t;
    29     scanf("%d", &t);
    30     while(t--){
    31         int n;
    32         scanf("%d", &n);
    33         while(n--){
    34             int num;
    35             string s1, s2;
    36             cin>>s1>>s2>>num;
    37             mp1[s2][s1]+=num;
    38         }
    39         for(ite1=mp1.begin(); ite1!=mp1.end(); ite1++){
    40             cout<<ite1->first<<endl;
    41             for(ite2=(ite1->second).begirangn(); ite2!=(ite1->second).end(); ite2++){
    42                 cout<<"   |----"<<ite2->first<<'('<<ite2->second<<')'<<'
    ';
    43             }
    44         }
    45         if(t!=0) cout<<'
    ';
    46         mp1.clear();
    47         mp2.clear();
    48     }
    49     return 0;
    50 }
  • 相关阅读:
    开源 免费 java CMS
    运行shell脚本报错 &#39;357273277&#39;: command not found 解决的方法
    Android学习笔记之Spinner下拉列表使用案例
    HDU 1542 Atlantis (线段树 + 扫描线 + 离散化)
    DrawerLayout
    云计算设计模式(十三)——领导人选举模式
    算法之贪心思想
    [Android]Volley源代码分析(叁)Network
    oracle TABLE ACCESS BY INDEX ROWID 你不知道的索引回表-开发系列(三)
    JavaScript No Overloading 函数无重载之说
  • 原文地址:https://www.cnblogs.com/Arrokoth/p/12181504.html
Copyright © 2011-2022 走看看