POJ 1002 487-3279 解题报告
2011-11-28 17:03 诸葛二牛 阅读(298) 评论(0) 编辑 收藏 举报Source Code
Problem: 1002 | User: | |
Memory: 5208K | Time: 1563MS | |
Language: C++ | Result: Accepted |
- Source Code
//POJ 1002
//考查点:字符串转化和STL库中,Map的数据结构的使用,迭代器的使用,注意C风格的字符串和C++的字符串的区别
//思路:使用alpha实现手机上字母和数字的映射,用map来记录字符串的个数,map的使用一般需要用map<string, int> 而不能使用map<char *,int>
//提交情况:
//Compile Error 2次,选错了语言,由于GCC和G++中不能在全局和函数中申请动态空间 最后使用和 C++提交通过。
//Accepted 1次。
//体会:感觉迭代器的效率并不是很高。
#include<iostream>
#include<string>
#include<string.h>
#include<map>
using namespace std;
#define MAXN 100010
map<string, int> dic;
map<char, char> alpha;
int n,i,j;
void init()
{
for(char i='0'; i<='9';i++ )
alpha[i]=i;
alpha['A']='2';alpha['B']='2';alpha['C']='2';
alpha['D']='3';alpha['E']='3';alpha['F']='3';
alpha['G']='4';alpha['H']='4';alpha['I']='4';
alpha['J']='5';alpha['K']='5';alpha['L']='5';
alpha['M']='6';alpha['N']='6';alpha['O']='6';
alpha['P']='7';alpha['R']='7';alpha['S']='7';
alpha['T']='8';alpha['U']='8';alpha['V']='8';
alpha['W']='9';alpha['X']='9';alpha['Y']='9';
}
void output()
{
bool flag = false; char *number = (char *)malloc(20*sizeof(char));
for( map<string, int>::iterator iter = dic.begin(); iter!=dic.end(); ++iter)
if((*iter).second>1){
flag = true;
number = (char *)(*iter).first.c_str();
for(i=0; i<=2;i++)
cout<<number[i];
cout<<'-';
for(i=3;number[i]; i++) cout<<number[i];
cout<<""<<(*iter).second<<endl;
}
if(flag==false) cout<<"No duplicates.";
}
int main(){
char *sline = (char *)malloc(20*sizeof(char));
char *number = (char *)malloc(20*sizeof(char));
init();
while(cin>>n)
{
dic.clear();
while(n-->0){
cin>>sline;
for( i=0,j=0; sline[i]; i++)
if(alpha.count(sline[i])==1)
number[j++]=alpha[sline[i]];
number[j]='\0';
string key;
key.insert(0,number);
dic[key]++;
}
output();
}
return 0;
}