洛谷P2037 电话号码
2024-10-21 07:42:16
P2037 电话号码
题目描述
一串由长长的数字组成的电话号码通常很难记忆。为了方便记忆,有种方法是用单词来方便记忆。例如用“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。
#include<iostream>
#include<cstdio>
#include<cstring>
#define mod 1000003
using namespace std;
int t[],n;
long long map[];
char s[];
void Hash(char ch[],int len){
long long res=,now=;
for(int i=;i<=len;i++){
if(ch[i]<=''&&ch[i]>='')res=(res*+ch[i]-'')%mod,now=now*+ch[i]-'';
else{
if(ch[i]<='C'&&ch[i]>='A')res=(res*+)%mod,now=now*+;
if(ch[i]<='D'&&ch[i]>='F')res=(res*+)%mod,now=now*+;
if(ch[i]<='G'&&ch[i]>='I')res=(res*+)%mod,now=now*+;
if(ch[i]<='J'&&ch[i]>='L')res=(res*+)%mod,now=now*+;
if(ch[i]<='M'&&ch[i]>='O')res=(res*+)%mod,now=now*+;
if(ch[i]=='P'||ch[i]=='R'||ch[i]=='S')res=(res*+)%mod,now=now*+;
if(ch[i]<='T'&&ch[i]>='V')res=(res*+)%mod,now=now*+;
if(ch[i]<='W'&&ch[i]>='Y')res=(res*+)%mod,now=now*+;
}
}
if(!t[res])map[res]=now;
t[res]++;
}
void Print(int x){
printf("%d-",map[x]/);
printf("%d",map[x]%);
}
int main(){
freopen("Cola.txt","r",stdin);
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%s",s+);
int len=strlen(s+);
Hash(s,len);
}
for(int i=;i<=;i++){
if(t[i]>){
Print(i);
printf(" %d\n",t[i]);
}
}
return ;
}
10分 hash再次写炸,感觉整个人都不好了
/*
以后不要逞强用hash了!就选stl map<string,int>
*/
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
using namespace std;
int n,map[]={,,,,,,,,,,,,,,,,,,,,,,,,};
string s[],c;
int main(){
freopen("Cola.txt","r",stdin);
scanf("%d",&n);
for(int i=;i<=n;i++){
cin>>c;
int len=c.length();
for(int j=;j<c.length();j++){
if(c[j]=='-')continue;
if(c[j]<=''&&c[j]>='')s[i]+=c[j];
else s[i]+=map[c[j]-'A']+'';
}
}
int t=;
bool flag=;
sort(s+,s+n+);
for(int i=;i<=n+;i++){
if(s[i]!=s[i-]){
if(t>)flag=,cout<<s[i-].substr(,)<<'-'<<s[i-].substr(,)<<' '<<t<<endl;
t=;
}
else t++;
}
if(!flag)printf("No duplicates.");
return ;
}
100分 STL_map
最新文章
- 基于Twitter-Snowflake的java改进版,去状态化实现
- Android之动态申请权限(API23以上需求)
- grunt压缩js文件
- Ehcache 整合Spring 使用页面、对象缓存
- R语言中strptime返回值永远为NA的问题
- mysql设置指定ip远程访问连接实例
- asp.net 从客户端中检测到有潜在危险的 Request.Form 值错误解
- JavaScript绑定事件的方法[3种]
- Umbraco Content属性
- js模版引擎handlebars.js实用教程
- c语言,string库函数itoa实现:将int转换为char*
- druid 文档 和 源码地址
- 学习Identity Server 4的预备知识
- Open/Close Port in Centos
- Elasticsearch 常见问题的解决思路
- java的移位运算详解(举例说明)
- MySql的InnoDB存储引擎--索引
- Xcode6 部署iphone4s出现的问题 No architectures to compile for
- Mysql 常用单词
- oracle之数据同步:Oracle Sql Loader使用说明(大批量快速插入数据库记录)
热门文章
- hash算法打散存储文件
- 防止未登录用户操作—struts2拦截器简单实现(转)
- python习题-产生8位随机密码要包含大小写及数字
- codeforces 651A A. Joysticks (模拟)
- Convolutional Neural Networks for Visual Recognition 4
- QT(4)信号与槽
- 洛谷 P4546 &; bzoj 5020 在美妙的数学王国中畅游 —— LCT+泰勒展开
- 通过 命令提示符(cmd.exe)连接 Oracle 数据库
- C++ 替换字符串内某个字符或子串
- 安装zendstudio和破解方法及配置svn