【Sicily】1027. MJ, Nowhere to Hide( 使用map来实现)

原创 2016年05月31日 10:24:29
一、题目:

Constraints

Time Limit: 1 secs, Memory Limit: 32 MB

Description

On BBS, there is a familiar term called MJ (short for MaJia), which means another BBS ID of one person besides his/her main ID.
These days, a lot of ACMers pour water on the ACMICPC Board of argo. Mr. Guo is very angry about that and he wants to punish these guys. ACMers are all smart boys/girls, right? They usually use their MJs while pouring water, so Mr. Guo can not tell all the IDs apart.  Unfortunately, the IP can not be changed, i.e, the posts of main ID and MJ of the same person has the same IP address, meanwhile, the IP addresses of different person is different.  Assuming that each person has exactly one main ID and one MJ, by reading their posts on BBS, you then tell Mr. Guo whom each MJ belongs to.

Input

The first line of each test cases is an even integer n (0<=n<=20), the number of posts on BBS.
Then n lines follow, each line consists of two strings:
BBS_ID IP_Address
BBS_ID means the ID who posts this post. BBS_ID is a string contains only lower case alphabetical characters and its length is not greater than 12. Each BBS ID appears only once in each test cases.
IP_Address is the IP address of that person. The IP address is formatted as “A.B.C.D”, where A, B, C, D are integers ranging from 0 to 255.
It is sure that there are exactly 2 different BBS IDs with the same IP address. The first ID appears in the input is the main ID while the other is the MJ of that person.
Your program should be terminated by n = 0.

Output

For each test case, output n/2 lines of the following format: “MJ_ID is the MaJia of main_ID”
They should be displayed in the lexicographical order of the main_ID.
Print a blank line after each test cases.
See the sample output for more details.

Sample Input

8
inkfish 192.168.29.24
zhi 192.168.29.235
magicpig 192.168.50.170
pegasus 192.168.29.235
iamcs 202.116.77.131
finalBob 192.168.29.24
tomek 202.116.77.131
magicduck 192.168.50.170
4
mmmmmm 172.16.72.126
kkkkkk 192.168.49.161
llllll 192.168.49.161
nnnnnn 172.16.72.126
0

Sample Output

tomek is the MaJia of iamcs
finalBob is the MaJia of inkfish
magicduck is the MaJia of magicpig
pegasus is the MaJia of zhi
 
llllll is the MaJia of kkkkkk
nnnnnn is the MaJia of mmmmmm

Problem Source

ZSUACM Team Member



二、代码实现

#include <cstdio>
#include <map>
#include<string>
#include<iostream>
using namespace std;

int main(){
    map<string,string> mapIp;
    map<string,string> mapMaJia;
    while(true){
        int n;
        scanf("%d",&n);
        if(n==0)
           break;
        mapIp.clear();
        mapMaJia.clear();
        while(n--){
            string ip,name;
            cin>>name>>ip;
            map<string,string>::iterator it=mapIp.find(ip);
            if(it==mapIp.end())
                mapIp.insert(make_pair(ip,name));
            else
                mapMaJia.insert(make_pair(it->second,name));
        }
        for(map<string,string>::iterator it=mapMaJia.begin();it!=mapMaJia.end();it++){
            cout<<it->second<<" is the MaJia of "<<it->first<<endl; 
        }
        cout<<endl;              
    }  
}



三、思路讲解
主要用到的是map容器类,mapIp中存放ip和name,首先判断mapIp中是否存在某ip,如果不存在,就将这个ip以及对应的name存入mapIp中;如果存在,就将mapIp中IP对应的name,与现有IP对应的name存入mapMaJia中,mapMaJia存放的就是需要输出的所有对象。

四、知识点讲解
(1)map相关知识点:

C++ map的基本操作和使用:

Map是c++的一个标准容器,她提供了很好一对一的关系,在一些程序中建立一个map可以起到事半功倍的效果,总结了一些map基本简单实用的操作!
1. map最基本的构造函数;
   map<string , int> mapstring;         map<int ,string >mapint;
   map<sring, char>mapstring;         map< char ,string>mapchar;
   map<char ,int>mapchar;            map<int ,char >mapint;

2. map添加数据;

   map<int ,string> maplive;  
   1.maplive.insert(pair<int,string>(102,"aclive"));
   2.maplive.insert(map<int,string>::value_type(321,"hai"));
   3, maplive[112]="April";//map中最简单最常用的插入添加!
3,map中元素的查找:

   find()函数返回一个迭代器指向键值为key的元素,如果没找到就返回指向map尾部的迭代器。        

   map<int ,string >::iterator l_it;; 
   l_it=maplive.find(112);
   if(l_it==maplive.end())
                cout<<"we do not find 112"<<endl;
   else cout<<"wo find 112"<<endl;
4,map中元素的删除:
   如果删除112;
   map<int ,string> ::iterator l_it;;
   l_it=maplive.find(112);
   if(l_it==maplive.end())
        cout<<"we do not find 112"<<endl;
   else maplive.erase(l_it);  //delete 112;
5,map中 swap的用法:
  Map中的swap不是一个容器中的元素交换,而是两个容器交换;
  For example:
  #include< map>
  #include< iostream>

  using namespace std;

  int main( )
  {
      map <int, int> m1, m2, m3;
      map <int, int>::iterator m1_Iter;

      m1.insert ( pair <int, int>  ( 1, 10 ) );
      m1.insert ( pair <int, int>  ( 2, 20 ) );
      m1.insert ( pair <int, int>  ( 3, 30 ) );
      m2.insert ( pair <int, int>  ( 10, 100 ) );
      m2.insert ( pair <int, int>  ( 20, 200 ) );
      m3.insert ( pair <int, int>  ( 30, 300 ) );

   cout<< "The original map m1 is:";
   for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ )
      cout << " "<< m1_Iter->second;
      cout  << "."<< endl;

   // This is the member function version of swap
   //m2 is said to be the argument map; m1 the target map
  m1.swap( m2 );

   cout<< "After swapping with m2, map m1 is:";
   for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ )
      cout << " "<< m1_Iter -> second;
      cout  << "."<< endl;
   cout<< "After swapping with m2, map m2 is:";
   for ( m1_Iter = m2.begin( ); m1_Iter != m2.end( ); m1_Iter++ )
      cout << " "<< m1_Iter -> second;
      cout  << "."<< endl;
   // This is the specialized template version of swap
   swap( m1, m3 );

   cout<< "After swapping with m3, map m1 is:";
   for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ )
      cout << " "<< m1_Iter -> second;
      cout  << "."<< endl;
}

6.map的sort问题:
  Map中的元素是自动按key升序排序,所以不能对map用sort函数:
  For example:
  #include< map>
  #include< iostream>

  using namespace std;

 int main( )
 {
   map< int, int> m1;
   map <int, int>::iterator m1_Iter;

   m1.insert ( pair< int, int>  ( 1, 20 ) );
   m1.insert ( pair< int, int>  ( 4, 40 ) );
   m1.insert ( pair< int, int>  ( 3, 60 ) );
   m1.insert ( pair< int, int>  ( 2, 50 ) );
   m1.insert ( pair< int, int>  ( 6, 40 ) );
   m1.insert ( pair< int, int>  ( 7, 30 ) );

   cout<< "The original map m1 is:"<<endl;
   for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ )
      cout <<  m1_Iter->first<<" "<<m1_Iter->second<<endl;
  
}
  The original map m1 is:
  1 20
  2 50
  3 60
  4 40
  6 40
  7 30
  请按任意键继续. . .

7,   map的基本操作函数:
      C++ Maps是一种关联式容器,包含“关键字/值”对
      begin()          返回指向map头部的迭代器
      clear()         删除所有元素
      count()          返回指定元素出现的次数
      empty()          如果map为空则返回true
      end()            返回指向map末尾的迭代器
      equal_range()    返回特殊条目的迭代器对
      erase()          删除一个元素
      find()           查找一个元素
      get_allocator()  返回map的配置器
      insert()         插入元素
      key_comp()       返回比较元素key的函数
      lower_bound()    返回键值>=给定元素的第一个位置
      max_size()       返回可以容纳的最大元素个数
      rbegin()         返回一个指向map尾部的逆向迭代器
      rend()           返回一个指向map头部的逆向迭代器
      size()           返回map中元素的个数
      swap() 

版权声明:本文为博主原创文章,未经博主允许不得转载。

sicily-1027. MJ, Nowhere to Hide

1027. MJ, Nowhere to Hide 限制条件 时间限制: 1 秒, 内存限制: 32 兆 题目描述 On BBS, there is a familiar term ...

sicily 1027. MJ, Nowhere to Hide

1027. MJ, Nowhere to Hide Constraints Time Limit: 1 secs, Memory Limit: 32 MB Description On BBS, ...

sicily 1027 MJ, Nowhere to Hide

1027. MJ, Nowhere to Hide Sample Input 8 inkfish 192.168.29.24 zhi 192.168.29.235 magicpig 192.16...

1027. MJ, Nowhere to Hide

1027. MJ, Nowhere to Hide Description On BBS, there is a familiar term called MJ (short fo...

算法学习【1】 - 1027. MJ, Nowhere to Hide

题目:http://soj.me/1027 1027. MJ, Nowhere to Hide Description On BBS, there is a ...
  • BetaBin
  • BetaBin
  • 2012年03月15日 12:29
  • 1366

1024[MJ, Nowhere to Hide]

Description On BBS, there is a familiar term called MJ (short for MaJia), which means another BBS...

2016/9/8 1003. MJ, Nowhere to Hide

整道题理解起来并不难,先是通过遍历找到ip地址相同的,然后记录对应的两个id,进行排序后输出。根据排序方法的不同,用了两种记录。一种是用一个二维数组记录,然后直接冒泡排序;另外一种是用结构体记录,再自...

MJ, Nowhere to Hide马甲账号无处可藏

Description On BBS, there is a familiar term called MJ (short for MaJia), which means another BBS...
  • reiliu
  • reiliu
  • 2012年10月09日 08:31
  • 730

sicily 1027

#include "iostream" #include "string" using namespace std; int main() { int n; while (cin >>...
  • yzl_rex
  • yzl_rex
  • 2011年10月31日 17:58
  • 498
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【Sicily】1027. MJ, Nowhere to Hide( 使用map来实现)
举报原因:
原因补充:

(最多只允许输入30个字)