| ||||||||||
| 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 | |||||||||
Re:为什么总是超时??求高手指点一下,谢谢In Reply To:为什么总是超时??求高手指点一下,谢谢 Posted by:zoliu at 2012-09-14 03:30:59 把convert提出来以减少递归的次数还是不行~~~~~~~~~~~
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void convert(char** ax,char** as,long size){
long i,j,k;
char ch;
for(k=0;k<size;k++){
i=0,j=0;
*(*(as+k)+3)='-';
for(;(ch=*(*(ax+k)+i))!='\0';i++)
{
if(j==3) j++;
if(ch=='-') {continue;}
if(ch>='0'&&ch<='9') {as[k][j++]=ch;continue;}
if(ch<=67) {as[k][j++]='2';continue;}
if(ch<=70) {as[k][j++]='3';continue;}
if(ch<=73) {as[k][j++]='4';continue;}
if(ch<='L'){as[k][j++]='5';continue;}
if(ch<='O'){as[k][j++]='6';continue;}
if(ch<='S'){as[k][j++]='7';continue;}
if(ch<='V'){as[k][j++]='8';continue;}
if(ch<='Y'){as[k][j++]='9';continue;}
}
as[k][j++]='\0';
// puts(as[k]);
}
//return as;
}
void sort(char** ass,int size)
{
int i,j;
char* temp;
for(i=1;i<size;i++){
temp = ass[i];
j=i-1;
while(j>=0&&strcmp(ass[j],temp)>0){
ass[j+1]=ass[j];
ass[j]=temp;
j--;
}
}
}
int main(void)
{
long caseNum;
long i=0;
int count=1;
char **arr,**ass;
scanf("%ld",&caseNum);
//初始化指针数组
arr = (char**)malloc(sizeof(char*)*caseNum);
ass = (char**)malloc(sizeof(char*)*caseNum);
for(;i<caseNum;i++){
arr[i] = (char*)malloc(sizeof(char)*15);
ass[i] = (char*)malloc(sizeof(char)*8);
scanf("%s",arr[i]);
//convert(arr[i],ass[i]);
}
convert(arr,ass,caseNum);
sort(ass,caseNum);
for(i=0;i<caseNum-1;i++){
if(strcmp(ass[i],ass[i+1])==0){
count++;continue;
}else{
if(count>1){
printf("%s %d\n",ass[i],count);
count=1;
}
continue;
}
}
return EXIT_SUCCESS;
}
> 代码如下:
>
> #include<stdio.h>
> #include<stdlib.h>
> #include<string.h>
> #include<time.h>
>
> char* convert(char* ax,char* as){
> int length=strlen(ax);
> int i=0,j=0;
> as[3]='-';
> for(;*(ax+i)!='\0';i++)
> {
>
> if(j==3) j++;
> if(ax[i]=='-') {continue;}
> if(ax[i]>='0'&&ax[i]<='9') {as[j++]=ax[i];continue;}
> if(ax[i]<=67) {as[j++]='2';continue;}
> if(ax[i]<=70) {as[j++]='3';continue;}
> if(ax[i]<=73) {as[j++]='4';continue;}
> if(ax[i]<='L'){as[j++]='5';continue;}
> if(ax[i]<='O'){as[j++]='6';continue;}
> if(ax[i]<='S'){as[j++]='7';continue;}
> if(ax[i]<='V'){as[j++]='8';continue;}
> if(ax[i]<='Y'){as[j++]='9';continue;}
> }
> *(as+j)='\0';
>
> return as;
> }
>
> void sort(char** ass,int size)
> {
> int i,j;
> char* temp;
> for(i=1;i<size;i++){
> temp = ass[i];
> j=i-1;
> while(j>=0&&strcmp(ass[j],temp)>0){
> ass[j+1]=ass[j];
> ass[j]=temp;
> j--;
> }
>
> }
>
> }
> int main(void)
> {
>
> long caseNum;
> long i=0;
> int count=1;
> char **arr,**ass;
>
> scanf("%ld",&caseNum);
> //初始化指针数组
> arr = (char**)malloc(sizeof(char*)*caseNum);
> ass = (char**)malloc(sizeof(char*)*caseNum);
>
> for(;i<caseNum;i++){
> arr[i] = (char*)malloc(sizeof(char)*15);
> ass[i] = (char*)malloc(sizeof(char)*8);
> scanf("%s",arr[i]);
> convert(arr[i],ass[i]);
>
> }
>
> sort(ass,caseNum);
>
> for(i=0;i<caseNum-1;i++){
> if(strcmp(ass[i],ass[i+1])==0){
> count++;continue;
> }else{
> if(count>1){
> printf("%s %d\n",ass[i],count);
> count=1;
> }
> continue;
> }
> }
>
> return EXIT_SUCCESS;
>
> }
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator