http://poj.org/problem?id=1002

题意:是说很多公司用了容易记住的电话号码,例如有英文字母的或者是用了很多连字符或没有连字符的。每个电话号码都有标准模式,而为了统计有没有重复的电话号码,就要统计有多少的电话号码是重复的,只要是有重复的就输出他的标准模式,如果所有的字符串都没有重复的,就输出No duplicates.

思路:这个题就用了普通的枚举,用的是cin输入的,结果是超时了,后来改成scanf就A了。这个题还可以用map去做,以及在排序的时候转换成整型会省更多的时间,后两种方法,第一种方法用时1454ms,第三种方法用时574ms,至于map我还没写,夜实在是深了,我先睡了,明天去做一下 。

普通方法

#include<iostream>
#include<cstring>
#include<string>
#include<cstdlib>
#include<cstdio>
#include<algorithm> using namespace std ; char a[] = "";
char ch[] ,sh[][];
int n ,j; int cmp(const void *b,const void *c)
{
return strcmp((char *)b,(char *)c) ;
}
void cuizhehundan()
{
int len = strlen(ch) ;
int flag = ;
for(int i = ; i < len ; i++)
{
if(ch[i] >= ''&&ch[i] <= '')
sh[j][flag++] = ch[i] ;
if(ch[i] == '-'||ch[i] == 'Q'||ch[i] == 'Z')
continue ;
if(ch[i] >= 'A'&&ch[i] < 'Z')
sh[j][flag++] = a[ch[i]-'A'];
}
sh[j][flag] = '\0' ;
//cout<<sh[j]<<endl;
} int main()
{
int n ;
cin>>n ;
for(j = ; j < n ; j++)
{
scanf("%s",ch) ;
cuizhehundan();
}
qsort(sh,n,sizeof(sh[]),cmp) ;
int mark = ;
for(int i = ; i < n- ; i++)
{
int num = ;
// int x = i ;
while(i < n- &&strcmp(sh[i],sh[i+]) == )
{
num++ ;
i++ ;
}
if(num > )
{
for(int h = ; h < ; h++)
printf("%c",sh[i][h]);
cout<<'-';
for(int h = ; h < ; h++)
printf("%c",sh[i][h]);
// cout<<" ";
printf(" %d\n",num) ;
//cout<<num<<endl;
mark = ;
}
num = ;
}
if(!mark)
printf("No duplicates.\n");
return ;
}

转化整型

#include<iostream>
#include<cstring>
#include<string>
#include<cstdlib>
#include<cstdio>
#include<algorithm> using namespace std ; char a[] = "";
char ch[] ;
char sh[];
int n ,j; void cuizhehundan()
{
int len = strlen(ch) ;
int flag = ;
for(int i = ; i < len ; i++)
{
if(ch[i] >= ''&&ch[i] <= '')
sh[flag++] = ch[i] ;
if(ch[i] == '-'||ch[i] == 'Q'||ch[i] == 'Z')
continue ;
if(ch[i] >= 'A'&&ch[i] < 'Z')
sh[flag++] = a[ch[i]-'A'];
}
sh[flag] = '\0' ;
// for(int i = 0 ; i < len ; i++)
// cout<<sh[i];
// cout<<endl;
} int main()
{
int n ;
cin>>n ;
int shh[] ;
for(j = ; j < n ; j++)
{
scanf("%s",ch) ;
cuizhehundan();
shh[j] = atoi(sh) ;
}
sort(shh,shh+n) ;
//qsort(sh,n,sizeof(sh[0]),cmp) ;
int mark = ;
for(int i = ; i < n- ; i++)
{
int num = ;
// int x = i ;
while(i < n- &&shh[i]==shh[i+])
{
num++ ;
i++ ;
}
if(num > )
{
printf("%03d-%04d %d\n",shh[i]/,shh[i]%,num) ;
mark = ;
}
num = ;
}
if(!mark)
printf("No duplicates.\n");
return ;
}

说好的map做法,昨晚因为不舒服很早就睡了

#include<cstdio>
#include<iostream>
#include<cstring>
#include<map>
#include<algorithm>
#include<string>
#define maxn 1000
using namespace std;
char s1[maxn],s2[maxn];
char s3[]="2223334445556667Q77888999Z";
map<string, int>q;
void change(char s[])
{
int k=strlen(s);
int j=;
for(int i=; i<k; i++)
{
if(s[i]!='Q'&&s[i]!='Z'&&s[i]!='-')
{
char c=s[i];
if(s[i]>='A'&&s[i]<'Z')
{
c=s3[c-'A'];
}
if(j==)
s2[j++]='-';
s2[j++]=c;
}
}
s2[j]='\0';
//printf("%s\n",s2);
if(q.find(s2)==q.end())
q[s2]=;
else
q[s2]++;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%s",s1);
change(s1);
}
map<string,int>::iterator it=q.begin();
bool flag=false;
while(it!=q.end())
{
if(it->second>)
{
flag=true;
cout<<it->first<<" "<<it->second<<endl;
}
it++;
}
if(!flag) printf("No duplicates.\n");
return ;
}

POJ1002487-3279(map)的更多相关文章

  1. GO语言总结(4)——映射(Map)

    上一篇博客介绍了Go语言的数组和切片——GO语言总结(3)——数组和切片,本篇博客介绍Go语言的映射(Map) 映射是一种内置的数据结构,用来保存键值对的无序集合. (1)映射的创建 make ( m ...

  2. Java-集合=第五题 (Map)设计Account 对象如下: private long id; private double balance; private String password; 要求完善设计,使得该Account 对象能够自动分配id。 给定一个List 如下: List list = new ArrayList(); list.add(new A

    第五题 (Map)设计Account 对象如下: private long id; private double balance; private String password; 要求完善设计,使得 ...

  3. Java-map-第一题 (Map)利用Map,完成下面的功能: 从命令行读入一个字符串,表示一个年份,输出该年的世界杯冠军是哪支球队。如果该 年没有举办世界杯,则输出:没有举办世界杯。 附:世界杯冠军以及对应的夺冠年份,请参考本章附录。 附录

    第一题 (Map)利用Map,完成下面的功能: 从命令行读入一个字符串,表示一个年份,输出该年的世界杯冠军是哪支球队.如果该 年没有举办世界杯,则输出:没有举办世界杯. 附:世界杯冠军以及对应的夺冠年 ...

  4. 第一题 (Map)利用Map,完成下面的功能:

    从命令行读入一个字符串,表示一个年份,输出该年的世界杯冠军是哪支球队.如果该 年没有举办世界杯,则输出:没有举办世界杯.  附:世界杯冠军以及对应的夺冠年份,请参考本章附录. 附录  1.历届世界杯冠 ...

  5. 【机器学习基本理论】详解最大似然估计(MLE)、最大后验概率估计(MAP),以及贝叶斯公式的理解

    [机器学习基本理论]详解最大似然估计(MLE).最大后验概率估计(MAP),以及贝叶斯公式的理解 https://mp.csdn.net/postedit/81664644 最大似然估计(Maximu ...

  6. 【机器学习基本理论】详解最大后验概率估计(MAP)的理解

    [机器学习基本理论]详解最大后验概率估计(MAP)的理解 https://blog.csdn.net/weixin_42137700/article/details/81628065 最大似然估计(M ...

  7. GoLang基础数据类型--->字典(map)详解

    GoLang基础数据类型--->字典(map)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   可能大家刚刚接触Golang的小伙伴都会跟我一样,这个map是干嘛的,是 ...

  8. 列表生成式+过滤器(filter)+映射(map)+lambda总结

    这些都是python的特色,不仅强大,而且好用,配合起来使用更是无敌. 零.lambda lambda用于产生一个匿名表达式,组成部分为:lambda + ‘函数表达式’ ‘函数表达式’由一个冒号加上 ...

  9. 最大似然估计(MLE)与最大后验概率(MAP)

    何为:最大似然估计(MLE): 最大似然估计提供了一种给定观察数据来评估模型参数的方法,即:“模型已定,参数未知”.可以通过采样,获取部分数据,然后通过最大似然估计来获取已知模型的参数. 最大似然估计 ...

  10. 从上面的集合框架图可以看到,Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射

    从上面的集合框架图可以看到,Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射.Collection 接口又有 3 ...

随机推荐

  1. Objective-c中的对象间的消息传递以及消息路由

    刚开始使用Objective-C时,总是习惯将对象间发送消息之间称呼为方法调用.心想,这和c#不是一回事吗?不就是调用实例方法吗,还搞个消息发送作甚,最后还不是要转化为方法的调用?通过一段时间的理解学 ...

  2. browserify.js 的模块加载

    browserify的模块加载基本上和nodejs的类似: nodejs 的模块加载是依次去读取文件然后用一个类eval() 函数执行并返回module.exports的结果.为了避免循环加载,在加载 ...

  3. 函数 swap

    1,default swap namespace std { template<typename T> void swap( T& a, T& b) { T temp(a) ...

  4. java学习笔记_GUI(3)

    如何加入自己定义的Panel import javax.swing.*; import java.awt.event.*; import java.awt.*; 5 class MyPanel ext ...

  5. 《APUE》第6章练习1

    问题:编写一个程序,它调用uname并输出utsname结构中的所有字段,并将输出与uname(1)命令的输出结构做比较. 我本来以为utsname结构也跟passwd结构一样,也有那三个函数来获取整 ...

  6. 【Winform】 无法将类型为“System.Windows.Forms.SplitContainer”的对象强制转换为类型“System.ComponentModel.ISupportInitialize”。

    问题:将dotnet framework 4.0 切换到2.0时,编译没有问题,在运行时出现如下错误:System.InvalidCastException: 无法将类型为“System.Window ...

  7. html5学习笔记——2016/4

    HTML5新增的结构元素: section     article     aside     header     hgroup     footer     nav     figure HTML ...

  8. AngularJS(5)-Http

    $http 是 AngularJS 中的一个核心服务,用于读取远程服务器的数据 加入下面有一个存储在web服务器上的数据,假设地址为http://TestWebData/myData.php { &q ...

  9. 判断IE版本的语句 [if lte IE 6]...[endif]

    <!–[if lte IE 6]>……<![endif]–>Ite:less than or equal to意思是小于或等于IE6浏览器,用于IE浏览器的条件注释,常用于CS ...

  10. Editplus 中将文本换行替换为<p>标签的正则表达式

    在Editplus.Notepad++编辑器里文本直接复制到在线编辑器里是不带<p>标签的,只是简单的将换行"\n"替换为"<br />" ...