题目描述

一串由长长的数字组成的电话号码通常很难记忆。为了方便记忆,有种方法是用单词来方便记忆。例如用“Three Tens”来记忆电话3-10-10-10。

电话号码的标准形式是七位数字,中间用连字号分成前三个和后四个数字(例如:888-1200)。电话号码可以用字母来表示。以下是字母与数字的对应:

A,B和C对应2

D,E和F对应3

G,H和I对应4

J,K和L对应5

M,N和O对应6

P,R和S对应7

T,U和V对应8

W,X和Y对应9

你会发现其中没有字母Q和Z。电话中的连字号是可以忽略。例如TUT-GLOP的标准形式是888-4567,310-GINO的标准形式是310-4466,3-10-10-10的标准形式是310-1010。

如果两个电话号码的标准形式是一样的,那么这两个电话号码就是一样的。

现在有一本电话簿,请从中找出哪些电话号码是重复的。

输入输出格式

输入格式:

第一行一个正整数N,表示有多少个电话号码。

以下N行,每行一个电话号码,电话号码由数字、大写字母(除Q、Z)和连字符组成。电话号码长度不会超过1000。所有电话号码都合法。

输出格式:

将所有重复的电话号码按字典序以标准形式输出,并且在每个电话号码后跟一个整数,表示该电话号码共出现了多少次,电话号码和整数间用一个空格隔开。不要输出多余空行。

如果没有重复的电话号码,则输出:No duplicates.

输入输出样例

输入样例#1: 复制

3
TUT-GLOP
3-10-10-10
310-1010

输出样例#1: 复制

310-1010 2

说明

【数据范围】

对于30%的数据,N<=20。

对于50%的数据,N<=10000。

对于100%的数据,N<=100000。

不用开map

/*用一个map把所有的字母表示的数字存起来,0和1题目中没说,但也要表示。
一个<string,int>类型的map表示a这个字符串出现的次数。
把每个读入的字符串转化为标准形式存起来,如果有出现次数超过两次的,存起来,答案数++。
最后将答案按字典序排序输出。  (如果map的初始化写到了函数里,别忘记调用!!!,一开始没调用,全输出的空格,调了半个多小时)。*/ #include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<map>
#include<string>
using namespace std;int n,cnt,now,pos,sum[100005];
string s,temp,tot[100005];
map<char,char> excel;
map<string,int> a;
struct Ans
{int cs;string chuan;
}ans[100005];void init()        //初始化函数
{excel['0']='0';excel['1']='1';excel['A']=excel['B']=excel['C']=excel['2']='2';excel['D']=excel['E']=excel['F']=excel['3']='3';excel['G']=excel['H']=excel['I']=excel['4']='4';excel['J']=excel['K']=excel['L']=excel['5']='5';excel['M']=excel['N']=excel['O']=excel['6']='6';excel['P']=excel['R']=excel['S']=excel['7']='7';excel['T']=excel['U']=excel['V']=excel['8']='8';excel['W']=excel['X']=excel['Y']=excel['9']='9';
}bool cmp(Ans a,Ans b)
{return a.chuan+b.chuan<b.chuan+a.chuan;
}int main()
{init();        //千万千万别忘记调用 scanf("%d",&n);for(int i=1;i<=n;i++){cin>>s;temp.clear();pos=0;        //将temp清空,pos归零 for(int j=0;j<s.length();j++){if(s[j]!='-')    //转化为数字
            {temp+=excel[s[j]];pos++;}if(pos==3) temp+='-',pos=-999999999;    //到了该加'-'的地方,加上'-',同时将pos设为负值,防止重复添加
        }if(!a[temp]) tot[++cnt]=temp;    //如果这个字符串没出现过,将这个字符串加入到已有的字符串中 a[temp]++;    //该字符串出现的次数++
    }for(int i=1;i<=cnt;i++)        //找哪个字符串是重复的
    {if(a[tot[i]]>1){ans[++now].chuan=tot[i];    //存答案 ans[now].cs=a[tot[i]];}}if(!now)    //没有重复的
    {printf("No duplicates.");return 0;}sort(ans+1,ans+now+1,cmp);        //按字典序排列 for(int i=1;i<=now;i++){cout<<ans[i].chuan<<' ';printf("%d\n",ans[i].cs);}return 0;
}

map TLE一个点

/*用一个map把所有的字母表示的数字存起来,0和1题目中没说,但也要表示。
一个<string,int>类型的map表示a这个字符串出现的次数。
把每个读入的字符串转化为标准形式存起来,如果有出现次数超过两次的,存起来,答案数++。
最后将答案按字典序排序输出。  (如果map的初始化写到了函数里,别忘记调用!!!,一开始调用,全输出的空格,调了半个多小时)。*/ #include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<map>
#include<string>
using namespace std;int n,cnt,now,pos,sum[100005];
string s,temp,tot[100005];
char excel[100];
map<string,int> a;
struct Ans
{int cs;string chuan;
}ans[100005];void init()        //初始化函数
{excel['0']='0';excel['1']='1';excel['A']=excel['B']=excel['C']=excel['2']='2';excel['D']=excel['E']=excel['F']=excel['3']='3';excel['G']=excel['H']=excel['I']=excel['4']='4';excel['J']=excel['K']=excel['L']=excel['5']='5';excel['M']=excel['N']=excel['O']=excel['6']='6';excel['P']=excel['R']=excel['S']=excel['7']='7';excel['T']=excel['U']=excel['V']=excel['8']='8';excel['W']=excel['X']=excel['Y']=excel['9']='9';
}bool cmp(Ans a,Ans b)
{return a.chuan+b.chuan<b.chuan+a.chuan;
}int main()
{init();        //千万千万别忘记调用 scanf("%d",&n);for(int i=1;i<=n;i++){cin>>s;temp.clear();pos=0;        //将temp清空,pos归零 for(int j=0;j<s.length();j++){if(s[j]!='-')    //转化为数字
            {temp+=excel[s[j]];pos++;}if(pos==3) temp+='-',pos=-999999999;    //到了该加'-'的地方,加上'-',同时将pos设为负值,防止重复添加
        }if(!a[temp]) tot[++cnt]=temp;    //如果这个字符串没出现过,将这个字符串加入到已有的字符串中 a[temp]++;    //该字符串出现的次数++
    }for(int i=1;i<=cnt;i++)        //找哪个字符串是重复的
    {if(a[tot[i]]>1){ans[++now].chuan=tot[i];    //存答案 ans[now].cs=a[tot[i]];}}if(!now)    //没有重复的
    {printf("No duplicates.");return 0;}sort(ans+1,ans+now+1,cmp);        //按字典序排列 for(int i=1;i<=now;i++){cout<<ans[i].chuan<<' ';printf("%d\n",ans[i].cs);}return 0;
}

char数组AC

转载于:https://www.cnblogs.com/lovewhy/p/8717604.html

P2037 电话号码相关推荐

  1. 洛谷P2037 电话号码

    P2037 电话号码 题目描述 一串由长长的数字组成的电话号码通常很难记忆.为了方便记忆,有种方法是用单词来方便记忆.例如用"Three Tens"来记忆电话3-10-10-10. ...

  2. 电话号码正则表达式键盘弹起验证

    <!--电话号码正则表达式键盘弹起验证--> <input class="telphone-number" onkeyup="(this.v=funct ...

  3. java电话号码开头_JS使用正则验证手机号包含400和800开头号码

    正则表达式,又称正规表示法.常规表示法(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表达式使用单个字符串来描述.匹配一系列符 ...

  4. php正则邮箱验证,php正则表达式验证(邮件地址、Url地址、电话号码、邮政编码)...

    本文实例需要验证的内容:邮件地址.Url地址.电话号码.邮政编码,验证方法分享给大家供大家参考,具体内容如下 1.电子邮件地址的校验 /* 校验邮件地址*/ function checkMail($e ...

  5. 编写程序创建一个通讯录文件,在其中存入10位同学的姓名、年龄、电话号码,并在屏幕上输出第2、4、6、8、10位同学的信息

    <程序设计基础-c语言>杨莉 刘鸿翔 ISBN-978-7-03-032903-5 p257 习题8 8.编写程序创建一个通讯录文件,在其中存入10位同学的姓名.年龄.电话号码,并在屏幕上 ...

  6. 防止在iOS设备中的Safari将数字识别为电话号码

    转:防止在iOS设备中的Safari将数字识别为电话号码 在测试中发现iPad上的Safari总会把长串数字识别为电话号码,文字变成蓝色,点击还会弹出菜单添加到通讯录. 别的地方倒也罢了,如果在用户名 ...

  7. java 验证手机号码、电话号码(包括最新的电信、联通和移动号码)

    目前的号码段(2017-06-01更新) java代码 package com.linbilin.test;import java.util.regex.Pattern;public class Ch ...

  8. 电话号码 【trie树】

    电话号码 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描写叙述 给你一些电话号码,请推断它们是否是一致的,即是否有某个电话是还有一个电话的前缀. 比方: Emerg ...

  9. php绑定邮箱地址链接,php完美匹配邮箱、链接地址和电话号码

    2012/01/31日 更新: 匹配手机以及电话号码 重新修改,可支持18开头的手机号,并修改bug,可匹配出字符串中所有匹配号码! 经过多次测试,以下代码可以实现邮箱.链接地址和电话号码的匹配 匹配 ...

  10. 从html中提取手机号码,C#从字符串中提取电话号码、手机号码

    C#程序目的:从一堆字符串中提取电话号码.手机号码,要求字符串中的号码以非数字字符分割.原理:利用正则表达式提取纯数字字符串数组,然后利用长度等号码特征,筛选过滤. 代码: //思路仅供参考 //nu ...

最新文章

  1. 14 类编程题解法总结
  2. 相同的研究手段,相反的研究结论例子
  3. RESTful API介绍
  4. 对Bridge模式的理解
  5. web服务器获取项目路径问题,读取web项目properties文件路径 解决tomcat服务器找不到properties路径问题...
  6. 为什么使用ES6生成器
  7. arma模型_R语言与计量经济学(七)ARMA模型
  8. JAVA正则表达式介绍和使用
  9. PHP 实现中文截取无乱码的方法
  10. 题目7 街区最短路径问题
  11. 针对中位数求解的几道题
  12. LINQ简记(3):子句
  13. iis6安装PHPManager和URL Rewrite
  14. CDA备考学习学习笔记——基础知识篇(一)
  15. 问题解决-Visio2016和Office不能并行
  16. 快乐牛牛终极板creator1.82 shader 挫牌代码
  17. 网络-数据链路层回顾
  18. 好不容易进了洞房,解不开新娘的衣服,新郎一怒走天涯,人间惨剧啊!
  19. CentOS 6.3下Samba服务器的安装与配置
  20. Z世代偏爱怀旧IP,B站UP主不可忽视的流量蓝海

热门文章

  1. 什么是cosmos?
  2. SecKill学习初步框架时报错记录
  3. 想转行学IT!0基础应该要学习哪个技术
  4. 解决word各级标题序号后面有长空格
  5. 万娟 白话大数据和机械学习_《白话大数据与机器学习》.pdf
  6. 学计算机考公务员可以做什么的,学计算机的考公务员将来干什么啊
  7. 用devc++表白_【吉利表白墙】19级倪yl,风吹起如花般破碎的流年,而你的笑容摇晃摇晃,成为我命途中最美的点缀...
  8. python3.7怎么设置字体大小,python字体大小如何设置
  9. java读取欧姆龙plc,寄存器读取命令响应超时 欧姆龙plc寄存器读取命
  10. 一、音频基础知识 - 语音的基本特征