487-3279
Time Limit: 2000MS Memory Limit: 65536K
Description
企业喜欢拥有令人难忘的电话号码。
其中一个让电话号码令人难忘的方法是让它能品写出一个单词或短语。
例如,你可以 拨打TUT-GLOP 来打电话给滑铁卢大学
有时只用一部分数字来拼写一个单词
当你今晚回到你的酒店你可以在Gino's订购一个pizza 通过拨打 310-GINO
另一种让电话号码变得难忘的方法是 以令人难忘的方式将数字分组
你可以拨打他们的"三个十"号码(3-10-10-10)从pizza店订购pizza
标准形式的电话号码是七位十进制数字。在第三位和第四位之间有一个连字符(e.g. 888-1200)
下面提供了手机键盘字母与数字的映射表
这里没有Q、Z的映射表
连字符不会被输入,必要时候可以被加入或者去除
TUT-GLOP 的标准形式是 888-4567 ,310-GINO 的标准形式是 310-4466, 3-10-10-10 的标准形式是310-1010
如果他们是相同的标准格式,两个电话号码是等价的。(他们输入了相同的数字)
你的公司正在编译一个当地企业电话号码的字典
做为质量控制的一部分,你需要检测是否有两个(或者更多)字典中的企业拥有相同的号码
Input
输入将包含一个例子
输入数据的第一行指定了一个正整数表示号码的总量最多 100,000
其余每行表示字典中的电话号码 每行表示一个号码
每个电话号码由一个包含了十进制数字, 大写字母(除了Q、Z),连字符的字符串构成
这个字符串中有恰好七个数字或者字母
Output
每个以任何形式出现多余一次的电话号码形成一行输出
输出的电话号码以标准形式,空格隔开,接下来是这个电话号码在字典中出现的次数
将这些输出按照字典顺序升序排序
如果没有重复 输出
No duplicates.
没有重复
===题目题解分隔线===
此题简单的字符串处理,为了省事直接switch,因为给的内存足够大,时间也很充足,且只有7位数,通过计算,只需要开一个10,000,000的数组(以int计算,占4字节,这个数组大小为40,000K左右,在题目范围内)即可避免排序,虽然冗长但写起来方便,最后注意前导0的问题。
以下AC代码
#include<iostream>
#include<string>
using namespace std;
int dic[10000000];
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
string str;
cin>>str;
int ans[7], p=0;
for(int j=0;j<str.length();j++){
if(str[j]!='-'){
if(str[j]>='0'&&str[j]<='9'){
ans[p++]=str[j]-'0';
}else{
switch(str[j]){
case 'A':
case 'B':
case 'C':
ans[p++]=2;
break;
case 'D':
case 'E':
case 'F':
ans[p++]=3;
break;
case 'G':
case 'H':
case 'I':
ans[p++]=4;
break;
case 'J':
case 'K':
case 'L':
ans[p++]=5;
break;
case 'M':
case 'N':
case 'O':
ans[p++]=6;
break;
case 'P':
case 'R':
case 'S':
ans[p++]=7;
break;
case 'T':
case 'U':
case 'V':
ans[p++]=8;
break;
case 'W':
case 'X':
case 'Y':
ans[p++]=9;
break;
}
}
}
}
int g=1000000,temp=0;
for(int j=0;j<7;j++){
temp+=ans[j]*g;
g/=10;
}
dic[temp]++;
}
bool flag=true;
for(int i=0;i<10000000;i++){
if(dic[i]>1){
string ans_str = "";
int t=i;
while(t>0){
ans_str+=t%10+'0';
t/=10;
}
while(ans_str.length()<7){
ans_str+="0";
}
string anser(ans_str.rbegin(), ans_str.rend());
cout<<anser.substr(0,3)<<"-"<<anser.substr(3,4)<<" "<<dic[i]<<endl;
flag=false;
}
}
if(flag){
cout<<"No duplicates.";
}
return 0;
}
POJ 1002 原题链接