PKU 1002解题总结
闲来无事,研究了一下PKU1002的题目,大意就是把含有字母的电话号码,转换为数字,然后再计算每个电话号码出现的次数,输出。本来蛮简单的一道题,结果折腾了好久,主要也是自己的水平太菜了,先是直接用字符串来处理,结果也都对,但是提交就是出现runtime error,后来才发现,要输入10W个电话号码,字符串光分配空间估计都够呛呀,也是自己审题不清,后来仔细阅读了了一下题目,也怪自己英文太挫了,在网上借鉴了一下思路,因为题目限制最大7位完全可以用整数来存储,然后保存之后,考虑要计算重复次数,结果楼主想出了特NC的一个算法,就是再开辟一个10W的整形数组,然后,对第一个冒泡进行排序,把出现次数大于2的全都转移到数组2中,然后再对2进行冒泡排序输出,由于要记录数组1和数组2的次数,相当于要开辟40W的空间,结果直接默认栈都被我整溢出了,后来又只好借鉴前辈高手的思路,也怪自己太笨了,真是算法写的挫,累死计算机啊,然后采用了,先转换数字,然后直接进行冒泡排序,修改了一番,没有错误了,结果timelimited。。。。。又去参考别人的思路去了,原来要快速排序,冒泡的时间效率是O2,快排是O,但是快排的算法感觉蛮难写的,而且还有递归,幸好stdlib中有现成的,就抄了一个过来,还是自己水平太差了,结果抄的不对,尼玛,参数也传错,结果快排等于没排,由于自己手工输的不需要快排,结果还老对,纠结了1天,无果,一直WA,快WA出翔了,第二天,用sample数据测试发现了快排的问题。qsort(a,num,sizeof(int),cmp) ,第一个参数是数组,第二个是数组的元素,第三个是一个步长,因为比较的是int,cmp是一个自己实现的函数,格式如下
int cmp(const void*a,const void*b)//快排自定义cmp
{
return *(int*)a-*(int*)b;
}
结果将参数修改了一下,直接就AC了,心情大好,总结一下,自己的错误蛮多的,不仔细,想当然,哎,说多了都是泪呀,把代码贴出来好了:
// 1002.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include "string.h"
#include "stdlib.h"
#include "stdio.h" int AtoNum(char* temp)
{
int carry=1;
int result=0;
int count=0;
int n=0;
for (int i=strlen(temp)-1;i>=0;i--)
{
switch(temp[i])
{
case '0':
n=0;
break;
case '1':
n=1;
break;
case 'A':
case 'B':
case 'C':
case '2':
n= 2;
break;
case 'D':
case 'E':
case 'F':
case '3':
n= 3;
break;
case 'G':
case 'H':
case 'I':
case '4':
n= 4;
break;
case 'J':
case 'K':
case 'L':
case '5':
n= 5;
break;
case 'M':
case 'N':
case 'O':
case '6':
n= 6;
break;
case 'P':
case 'R':
case 'S':
case '7':
n= 7;
break;
case 'T':
case 'U':
case 'V':
case '8':
n= 8;
break;
case 'W':
case 'X':
case 'Y':
case '9':
n= 9;
break;
}
if (temp[i]!='-')
{
count++;
if(count>7)
return result;
result+=n*carry;
carry=carry*10;
}
}
return result;
}
int cmp(const void*a,const void*b)//快排自定义cmp
{
return *(int*)a-*(int*)b;
}
int main(int argc, char* argv[])
{
int a[200000];
char input[256]; int num;
scanf("%d",&num);
for (int i=0 ;i<num;i++)
{
scanf("%s",input);
a[i]=AtoNum(input);//转换为数字
}
if (num==1)
{
printf("No duplicates.\n");
return 0;
}
qsort(a,num,sizeof(int),cmp);
int mark=0; //是否出现重复的
int times=1;
for (int i=0;i<num;i++)
{
if(a[i]==a[i+1])
{
mark=1;
times++;
}else
{
if(times>1)
printf("%03i-%04i %d\n",a[i]/10000,a[i]%10000,times);
times=1;
}
}
if (mark==0)
{
printf("No duplicates.\n");
}
return 0;
}
PKU 1002解题总结的更多相关文章
- PAT (Advanced Level) Practise 1002 解题报告
GitHub markdownPDF 问题描述 解题思路 代码 提交记录 问题描述 A+B for Polynomials (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 ...
- PKU 1003解题
首先庆祝一下,今天连A了3题.感觉后面这题太简单了.. 由于英文不好 ,找了个翻译: 若将一叠卡片放在一张桌子的边缘,你能放多远?如果你有一张卡片,你最远能达到卡片长度的一半.(我们假定卡片都正放在桌 ...
- PKU 1001解题代码
本来以前也写过,但是由于许多细节问题,没有AC,今天修改了一下,终于AC了,以前没有AC的具体原因总结了了一下,必须任何数的0次方都等于1没有考虑,还有就是首0和末尾0以及小数点没有处理好,下面贴代码 ...
- 杭电 1002 A + B Problem II【大数相加】
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1002 解题思路:就是把大的数用数组存放起来,像小学的时候用竖式加法来算两个数相加那样算: 反思:思路很 ...
- 2015 Multi-University Training Contest 8 hdu 5381 The sum of gcd
The sum of gcd Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)To ...
- PKU OJ 1002 487-3279
PKU OJ 1002 487-3279 487-3279 Description Businesses like to have memorable telephone numbers. One w ...
- [POJ 1002] 487-3279 C++解题报告
487-3279 Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 228365 Accepted: 39826 D ...
- 1002 Phone Numbers 解题报告
1002. Phone Numbers Time limit: 2.0 secondMemory limit: 64 MB In the present world you frequently me ...
- hdu 1002.A + B Problem II 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1002 题目意思:就是大整数加法. 两年几前做的,纯粹是整理下来的. #include <stdi ...
随机推荐
- [课程设计]Scrum 3.1 多鱼点餐系统开发进度(第三阶段项目构思与任务规划)
Scrum 3.1 多鱼点餐系统开发进度(第三阶段项目构思与任务规划) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题:餐厅到 ...
- 【前端】互联网公司2014前端笔试面试题JavaScript篇(待续)
// 网上找的题目,自己做了下 /**************************** *1. 用js实现随机选取10–100之间的10个数字,存入一个数组,并排序 *************** ...
- python--数据清洗
1.数据错误: 错误类型– 脏数据或错误数据• 比如, Age = -2003– 数据不正确• '0' 代表真实的0,还是代表缺失– 数据不一致• 比如收入单位是万元,利润单位是元,或者一个单位是美元 ...
- Bootstrap_标签
一.标签 在一些Web页面中常常会添加一个标签用来告诉用户一些额外的信息,比如说在导航上添加了一个新导航项,可能就会加一个“new”标签,来告诉用户. 那么在Bootstrap框架中特意将这样的效果提 ...
- manacher浅析
manacher算法的输入是一个字符串,可以计算出以每个字符为中心的最长回文子串的半径.为了避免讨论奇数偶数,将原串的每两个字母之间以及前后各加一个特殊字母,比如'#',那么对于abcbb就变成了 # ...
- (转) C/C++中const关键字详解
文章转自 http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777416.html 为什么使用const?采用符号常量写出的代码更容易维 ...
- 解决服务器时间Local time和RTC time不一致的问题
今天遇到了一个问题,发现程序读取的时间比实际的时间快了几分钟. 执行 timedatectl status 发现 Local time比实际的快,但是RTC time是准确的. 各种google也没搞 ...
- HTML基础(1)
1.前端开发语言介绍 HTML(Hypertext Markup Language)—— 结构—— 超文本标记语言 CSS(Cascading Style Sheets)—— 样式—— 层叠样式表 J ...
- Linux中关于安装包的分析。——Arvin
初接解LINUX的,同样都是for linux,但rpm.tar.gz.deb包还是有很大区别的,这种区别可使安装过程进行不下去.那我们应该下载什么格式的包呢? rpm包-在红帽LINUX.SUSE. ...
- 在centos6.5中安装zookeeper集群
简介 ZooKeeper服务器是用Java编写创建,它运行在JVM.所以需要使用JDK 6或更高版本,在这里就不说在centos安装jdk环境了,直接进入正题,我搭建的是 192.168.0.2, 1 ...