| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
使用排序做的 做了好多次终于 做出来了 C 写的 544k 360ms AC 体会好多。一点经验分享分享本人是菜鸟。最开始的时候就纠结过一个星期在这里题目上。现在终于征服它了。写的不好地方个位高手见谅。
第1 这个题就一组数据 只是这组数据很大。
第2 我使用堆排序做的。推荐大家使用堆排序和归并排序 我测试过排序十万个数据这两种排序时间用的最短。0.043S 就跑完了。冒泡啥的要41S
第3 .输入数据长度可能足够长,因为可以有多个‘-’ 我开到240才能行。
第4 推荐大家使用malloc这个函数 可以节省不必要的空间开销。
我的思路就是输入数据后然后把这些数据排序好了后。再扫描一次需要的数据输出
代码部分
写的很丑陋 惭愧。
#include<stdlib.h>
#include<stdio.h>
int tidy_phonenumber(char telphone[],int *number); /*字符串处理部分*/
int HeapAdjust(int mid[],int start,int n); /*构造堆排序的函数*/
int HeapSort(int mid[],int n); /*堆排序函数*/
int main(){
int n,i,j,k,flag=1,*mid;
char phone[250];
scanf("%d",&n);
mid=(int *)malloc(n*sizeof(int)); /*动态申请空间避免空间浪费*/
for(i=0;i<n;i++){
scanf("%s",phone);
tidy_phonenumber(phone,&mid[i]);
}
HeapSort(mid,n); /*排序部分*/
/*下面的对已经排序的好的数组进行扫描输出我们需要的*/
/*扫描部分自我感觉还可以优化*/
for(i=0;i<n;){
if(mid[i]==mid[i+1]){
for(j=i,k=1;mid[j]==mid[j+1];){
j++;
k++;
}
printf("%03d-%04d %d\n",mid[i]/10000,mid[i]%10000,k);
i+=k;
flag=0;
}else{
i++;
}
}
if(flag) /*如果没有相同的情况下输出。我想也不可能没有相同*/
printf("No duplicates.\n");
free(mid);/*释放空间*/
return 0;
}
int tidy_phonenumber(char telphone[],int *number){
char ch;
int j,i,k;
k=i=0;
while(telphone[i]){
ch=telphone[i];
if(ch>='0'&&ch<='9'){
k=k*10+(ch-'0');
}else{
if(ch>='A'&&ch<='P'){
j=(ch-'A')/3+2;
k=k*10+j;
}else{
if(ch>='R'&&ch<='Y'){
j=(ch-'A'-1)/3+2;
k=j+k*10;
}
}
}
i++;
}
*number=k;
return 0;
}
int HeapSort(int mid[],int n){
int i,j,value;
for(i=n/2-1;i>=0;i--){
HeapAdjust(mid,i,n);
}
for(i=n-1;i>0;i--){
value=mid[0];
mid[0]=mid[i];
mid[i]=value;
HeapAdjust(mid,0,i);
}
return 0;
}
int HeapAdjust(int mid[],int start,int n){
int i,j;
while(2*start+1<n){
j=2*start+1;
if((j+1)<n){
if(mid[j]<mid[j+1])
j++;
}
if(mid[start]<mid[j]){
i=mid[start];
mid[start]=mid[j];
mid[j]=i;
start=j;
}else{
break;
}
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator