Poj 1002

刚开始的时候简单写了map<string,int>映射,然后一直TLE。

后来看了各种代码改成map<int,int>,电话号码的规范化中的字母switch语句也改成存放在数组中。

不知道是编译器的问题还是什么,我用自己的dev-c++可以编译的代码在poj上总是编译错误。

另外比较坑的是虽然题目里说QZ不在映射范围内但其实测试用例中是包含QZ的,也要做处理。

 1 #include<iostream>
 2 #include<map>
 3 #include<cstring>
 4 #include<string> 
 5 using namespace std;
 6 int translate(string s){
 7     int tran[]={
 8         2,2,2,
 9         3,3,3,
10         4,4,4,
11         5,5,5,
12         6,6,6,
13         7,0,7,7,
14         8,8,8,
15         9,9,9,0
16     };
17     int count=0;
18     int m=0;
19     for(int i=0;i<s.length();i++){
20         if(isdigit(s[i])){
21             m=m*10+(s[i]-'0');
22         }
23         else if(isalpha(s[i])&&s[i]!='Q'&&s[i]!='Z'){
24             m=m*10+(tran[s[i]-'A']);
25         }
26     }
27     return m;
28 }
29 int main(){
30     map<int,int> dial;
31     int N;
32     int k;
33     string s;
34     cin>>N;
35     for(int i=0;i<N;i++){
36         cin>>s;
37         int tele=translate(s);
38         dial[tele]++;
39     } 
40     map<int,int>::iterator ip;
41     bool Noduplicates=true;
42     for(ip=dial.begin();ip!=dial.end();ip++){
43         if(ip->second!=1){
44             k=ip->first;
45             cout<<k/1000000<<k%1000000/100000<<k%100000/10000<<'-'<<k%10000/1000<<k%1000/100<<k%100/10<<k%10;
46             cout<<' '<<ip->second<<endl;
47             Noduplicates=false;
48         }
49     }
50     if(Noduplicates){
51         cout<<"No duplicates."<<endl;
52     }
53 }

*map的使用方法

*整形从高位到低位叠加的方法

 

posted @ 2017-01-24 18:19  水野玛琳  阅读(197)  评论(0编辑  收藏  举报