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