POJ1002电话号码字符串

2024-08-31 12:58

本文主要是介绍POJ1002电话号码字符串,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目意思:

输入一个串,里面包含一些数字和一些大写字母,以及 - ,字母变换成数字,保证了7个数字,输出重复出现超多1次的电话号码以及次数。规模1e5。

粽子,被这个题目坑了很久,首先是用字符串保存最后的电话号码,二维sort好像不能用,但是string可以用sort,一直wa,今天发现了两个错误,一个是最后扫描个数的时候,会漏掉最后面的一个号码,调整过来又wa了,因为如果只有一组数据,输出了No duplicates. 没有跟新判断无解的条件。第二个错误,是string输出不符合要求,<10000000的数将不会有7个。题目要求7个,就需要补0了。于是得用整数做。用整数做有两种方法,一直开1e7的数组,一种仍然扫描,但是也要注意之前的问题。

整数做AC的代码:

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
#include<map>
#include<stack>
#define rt return
#define bk break
#define ct continue
#define sf scanf
#define pf printf
#define ms memset
#define si(n) sf("%d",&n)
#define pi(n) pf("%d\n",n)
#define REP0(i,n) for(int i=0;i<(n);i++)
#define REP1(i,n) for(int i=1;i<=(n);i++)
#define REP(i,s,n) for(int i=s;i<=(n);i++)
#define db double
#define op operator
#define pb push_back
#define LL long long
#define INF 0x3fffffff
#define eps 1e-8
#define PI acos(-1)
#define maxn 10000001
#define maxm 1000
using namespace std;
int n;
char num[]="2223334445556667Q77888999Z";
int s[maxn];
int change(char str[]){int x=0,i=0;while(str[i]){if(isdigit(str[i])){x=x*10+str[i]-'0';}else if(str[i]!='-')//&&str[i]!='Q'&&str[i]!='Z'){x=x*10+num[str[i]-'A']-'0';}i++;}rt x;
}
bool cmp(int a,int b){rt a>b;
}
int main(){#ifdef ACBangfreopen("in.txt","r",stdin);#endifwhile(~sf("%d",&n)){ms(s,0,sizeof(s));for(int i=0;i<n;i++){char str[maxm];sf("%s",str);s[change(str)]++;}bool ok=true;for(int i=0;i<=maxn;i++){if(s[i]>1){pf("%03d-%04d %d\n",i/10000,i%10000,s[i]);ok=false;}}if(ok)puts("No duplicates.");}rt 0;
}

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
#include<map>
#include<stack>
#define rt return
#define bk break
#define ct continue
#define sf scanf
#define pf printf
#define ms memset
#define si(n) sf("%d",&n)
#define pi(n) pf("%d\n",n)
#define REP0(i,n) for(int i=0;i<(n);i++)
#define REP1(i,n) for(int i=1;i<=(n);i++)
#define REP(i,s,n) for(int i=s;i<=(n);i++)
#define db double
#define op operator
#define pb push_back
#define LL long long
#define INF 0x3fffffff
#define eps 1e-8
#define PI acos(-1)
#define maxn 100010
#define maxm 210
using namespace std;
int n;
char num[]={'2','2','2','3','3','3','4','4','4','5','5','5','6','6','6','7','0','7','7','8','8','8','9','9','9'};
string s[maxn];
void change(char str[]){int cnt=0,i=0;char tmp[maxm];strcpy(tmp,str);while(tmp[i]){if(isdigit(tmp[i])){str[cnt++]=tmp[i];}else if(tmp[i]!='-'){str[cnt++]=num[tmp[i]-'A'];}if(cnt==3)str[cnt++]='-';i++;}str[cnt]='\0';
}
void change2(char ch[],string str){for(int i=0;i<3;i++){ch[i]=str[i];}ch[3]='-';for(int i=4;i<8;i++){ch[i]=str[i];}
}
int main(){#ifdef ACBangfreopen("in.txt","r",stdin);#endifwhile(~sf("%d",&n)){for(int i=0;i<n;i++){char str[maxm];sf("%s",str);change(str);s[i]="";s[i]+=str;}sort(s,s+n);int cnt=0;string tmp="";bool ok=true;for(int i=0;i<n;i++){if(tmp.compare(s[i])==0){cnt++;}else{if(cnt>1){char res[10];change2(res,tmp);pf("%s %d\n",res,cnt);ok=false;}tmp="";tmp+=s[i];cnt=1;}}if(cnt>1){ok=false;char res[10];change2(res,tmp);pf("%s %d\n",res,cnt);}if(ok)puts("No duplicates.");}rt 0;
}

字符串做WA的代码,但是报TLE了,字符串输出超时呀。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
#include<map>
#include<stack>
#define rt return
#define bk break
#define ct continue
#define sf scanf
#define pf printf
#define ms memset
#define si(n) sf("%d",&n)
#define pi(n) pf("%d\n",n)
#define REP0(i,n) for(int i=0;i<(n);i++)
#define REP1(i,n) for(int i=1;i<=(n);i++)
#define REP(i,s,n) for(int i=s;i<=(n);i++)
#define db double
#define op operator
#define pb push_back
#define LL long long
#define INF 0x3fffffff
#define eps 1e-8
#define PI acos(-1)
#define maxn 1000010
#define maxm 1000
using namespace std;
int n;
char num[]="2223334445556667Q77888999Z";
int s[maxn];
int change(char str[]){int x=0,i=0;while(str[i]){if(isdigit(str[i])){x=x*10+str[i]-'0';}else if(str[i]!='-'&&str[i]!='Q'&&str[i]!='Z'){x=x*10+num[str[i]-'A']-'0';}i++;}rt x;
}
int main(){#ifdef ACBangfreopen("in.txt","r",stdin);#endifwhile(~sf("%d",&n)){for(int i=0;i<n;i++){char str[maxm];sf("%s",str);s[i]=change(str);}sort(s,s+n);
//        for(int i=0;i<n;i++)pf("%d\n",s[i]);int cnt=1;int val=s[0];bool ok=true;for(int i=1;i<n;i++){if(val==s[i]){cnt++;}else if(cnt>1){ok=false;pf("%03d-%04d %d\n",val/10000,val%10000,cnt);cnt=1;val=s[i];}else {val=s[i];cnt=1;}}if(cnt>1){pf("%03d-%04d %d\n",val/10000,val%10000,cnt);ok=false;//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}if(ok)puts("No duplicates.");}rt 0;
}


这篇关于POJ1002电话号码字符串的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1123974

相关文章

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

MySQL 获取字符串长度及注意事项

《MySQL获取字符串长度及注意事项》本文通过实例代码给大家介绍MySQL获取字符串长度及注意事项,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql 获取字符串长度详解 核心长度函数对比⚠️ 六大关键注意事项1. 字符编码决定字节长度2

Springboot3+将ID转为JSON字符串的详细配置方案

《Springboot3+将ID转为JSON字符串的详细配置方案》:本文主要介绍纯后端实现Long/BigIntegerID转为JSON字符串的详细配置方案,s基于SpringBoot3+和Spr... 目录1. 添加依赖2. 全局 Jackson 配置3. 精准控制(可选)4. OpenAPI (Spri

使用Python实现base64字符串与图片互转的详细步骤

《使用Python实现base64字符串与图片互转的详细步骤》要将一个Base64编码的字符串转换为图片文件并保存下来,可以使用Python的base64模块来实现,这一过程包括解码Base64字符串... 目录1. 图片编码为 Base64 字符串2. Base64 字符串解码为图片文件3. 示例使用注意

golang float和科学计数法转字符串的实现方式

《golangfloat和科学计数法转字符串的实现方式》:本文主要介绍golangfloat和科学计数法转字符串的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望... 目录golang float和科学计数法转字符串需要对float转字符串做处理总结golang float

Python如何判断字符串中是否包含特殊字符并替换

《Python如何判断字符串中是否包含特殊字符并替换》这篇文章主要为大家详细介绍了如何使用Python实现判断字符串中是否包含特殊字符并使用空字符串替换掉,文中的示例代码讲解详细,感兴趣的小伙伴可以了... 目录python判断字符串中是否包含特殊字符方法一:使用正则表达式方法二:手动检查特定字符Pytho

MySQL 字符串截取函数及用法详解

《MySQL字符串截取函数及用法详解》在MySQL中,字符串截取是常见的操作,主要用于从字符串中提取特定部分,MySQL提供了多种函数来实现这一功能,包括LEFT()、RIGHT()、SUBST... 目录mysql 字符串截取函数详解RIGHT(str, length):从右侧截取指定长度的字符SUBST

Python将字符串转换为小写字母的几种常用方法

《Python将字符串转换为小写字母的几种常用方法》:本文主要介绍Python中将字符串大写字母转小写的四种方法:lower()方法简洁高效,手动ASCII转换灵活可控,str.translate... 目录一、使用内置方法 lower()(最简单)二、手动遍历 + ASCII 码转换三、使用 str.tr

Java如何用乘号来重复字符串的功能

《Java如何用乘号来重复字符串的功能》:本文主要介绍Java使用乘号来重复字符串的功能,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java乘号来重复字符串的功能1、利用循环2、使用StringBuilder3、采用 Java 11 引入的String.rep

Java实现按字节长度截取字符串

《Java实现按字节长度截取字符串》在Java中,由于字符串可能包含多字节字符,直接按字节长度截取可能会导致乱码或截取不准确的问题,下面我们就来看看几种按字节长度截取字符串的方法吧... 目录方法一:使用String的getBytes方法方法二:指定字符编码处理方法三:更精确的字符编码处理使用示例注意事项方