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更新某个字段拼接固定字符串的实现

《MySQL更新某个字段拼接固定字符串的实现》在MySQL中,我们经常需要对数据库中的某个字段进行更新操作,本文就来介绍一下MySQL更新某个字段拼接固定字符串的实现,感兴趣的可以了解一下... 目录1. 查看字段当前值2. 更新字段拼接固定字符串3. 验证更新结果mysql更新某个字段拼接固定字符串 -

Java String字符串的常用使用方法

《JavaString字符串的常用使用方法》String是JDK提供的一个类,是引用类型,并不是基本的数据类型,String用于字符串操作,在之前学习c语言的时候,对于一些字符串,会初始化字符数组表... 目录一、什么是String二、如何定义一个String1. 用双引号定义2. 通过构造函数定义三、St

golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法

《golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法》:本文主要介绍golang获取当前时间、时间戳和时间字符串及它们之间的相互转换,本文通过实例代码给大家介绍的非常详细,感兴趣... 目录1、获取当前时间2、获取当前时间戳3、获取当前时间的字符串格式4、它们之间的相互转化上篇文章给大家介

C#数据结构之字符串(string)详解

《C#数据结构之字符串(string)详解》:本文主要介绍C#数据结构之字符串(string),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录转义字符序列字符串的创建字符串的声明null字符串与空字符串重复单字符字符串的构造字符串的属性和常用方法属性常用方法总结摘

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义

python中字符串拼接的几种方法及优缺点对比详解

《python中字符串拼接的几种方法及优缺点对比详解》在Python中,字符串拼接是常见的操作,Python提供了多种方法来拼接字符串,每种方法有其优缺点和适用场景,以下是几种常见的字符串拼接方法,需... 目录1. 使用 + 运算符示例:优缺点:2. 使用&nbsjsp;join() 方法示例:优缺点:3

java字符串数字补齐位数详解

《java字符串数字补齐位数详解》:本文主要介绍java字符串数字补齐位数,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java字符串数字补齐位数一、使用String.format()方法二、Apache Commons Lang库方法三、Java 11+的St

C++字符串提取和分割的多种方法

《C++字符串提取和分割的多种方法》在C++编程中,字符串处理是一个常见的任务,尤其是在需要从字符串中提取特定数据时,本文将详细探讨如何使用C++标准库中的工具来提取和分割字符串,并分析不同方法的适用... 目录1. 字符串提取的基本方法1.1 使用 std::istringstream 和 >> 操作符示

C语言字符函数和字符串函数示例详解

《C语言字符函数和字符串函数示例详解》本文详细介绍了C语言中字符分类函数、字符转换函数及字符串操作函数的使用方法,并通过示例代码展示了如何实现这些功能,通过这些内容,读者可以深入理解并掌握C语言中的字... 目录一、字符分类函数二、字符转换函数三、strlen的使用和模拟实现3.1strlen函数3.2st

Java反转字符串的五种方法总结

《Java反转字符串的五种方法总结》:本文主要介绍五种在Java中反转字符串的方法,包括使用StringBuilder的reverse()方法、字符数组、自定义StringBuilder方法、直接... 目录前言方法一:使用StringBuilder的reverse()方法方法二:使用字符数组方法三:使用自