| ||||||||||
| 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 | |||||||||
改了n遍仍旧超时。纯C写的我已经尽力了,要是有哪位大佬会优化劳烦告知。样例跑的结果是对的。#include <stdio.h>
#include <stdlib.h>
#define Max 60
#define Many 100000
int A[Many];
int id=0;
void translate(char str[]);
void print();
void insert(int s,int t);
int partition(int s,int t);
int main()
{
int number;
char str[Max];
scanf("%d",&number);
while(number!=0)
{
scanf("%s",str);
translate(str);
number--;
}
insert(0,id-1);//快排
print();
return 0;
}
void translate(char str[])
{
int i;
int sum=0;
for(i=0;str[i]!='\0';i++)
{
switch (str[i])
{
case 'A':case 'B':case 'C':sum=sum*10+2;break;
case 'D':case 'E':case 'F':sum=sum*10+3;break;
case 'G':case 'H':case 'I':sum=sum*10+4;break;
case 'J':case 'K':case 'L':sum=sum*10+5;break;
case 'M':case 'N':case 'O':sum=sum*10+6;break;
case 'P':case 'R':case 'S':sum=sum*10+7;break;
case 'T':case 'U':case 'V':sum=sum*10+8;break;
case 'W':case 'X':case 'Y':sum=sum*10+9;break;
case '0':sum=sum*10;break;
case '1':sum=sum*10+1;break;
case '2':sum=sum*10+2;break;
case '3':sum=sum*10+3;break;
case '4':sum=sum*10+4;break;
case '5':sum=sum*10+5;break;
case '6':sum=sum*10+6;break;
case '7':sum=sum*10+7;break;
case '8':sum=sum*10+8;break;
case '9':sum=sum*10+9;break;
case '-':break;
default :return;
}
}
if(A[id]<10000000)
{
A[id]=sum;
id++;
}
}
void insert(int s,int t)
{
int i;
if(s<t)
{
i=partition(s,t);
insert(s,i-1);
insert(i+1,t);
}
}
int partition(int s,int t)
{
int i=s,j=t,x;
int tmp=A[i];;
while(i<j)
{
while(j>i&&tmp<=A[j])
j--;
A[i]=A[j];
while(i<j&&tmp>=A[i])
i++;
A[j]=A[i];
}
A[i]=tmp;
return i;
}
void print()
{
int i=0,j,m,n,signal=0;
while(i<id)
{
j=1;
if(A[i]-A[i+1]==0)
{
while(A[i]==A[i+j])
j++;
m=A[i]/10000;
n=A[i]%10000;
//rintf("m=%d n=%d\n",m,n);
if(m<10)
printf("00");
else if(m<100)
printf("0");
else;
printf("%d%c",m,'-');
if(n<10)
printf("000");
else if(n<100)
printf("00");
else if(n<1000)
printf("0");
else;
printf("%d %d\n",n,j);
signal=1;
}
i+=j;
}
if(signal==0)
printf("No duplicates.");
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator