| ||||||||||
| 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 | |||||||||
菜鸟求教怎样解决TLE问题,希望高手给出相应解决方案代码,谢谢!//我的代码,就是最普通的那种,感觉数据应该没问题
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
void optimize(char* des,char* res);
void OutPut(int);
int _tmain(int argc, _TCHAR* argv[])
{
int t;
char resource[30];
char destination[10];
int modified[100000];
int count[100000];
scanf("%d",&t);
for(int i = 0;i<t;i++)
{
scanf("%s",resource);
optimize(destination,resource);
modified[i] = atoi(destination);
count[i] = 1;
}
//电话号码冒泡排序
int m,n,temp,done;
m = 0;
do
{
done = 1;
for(n = t-1;n>=m+1;n--)
{
if(modified[n]<modified[n-1])
{
done = 0;
temp = modified[n];
modified[n] = modified[n-1];
modified[n-1] = temp;
}
}
m++;
}while((m<t)&&!done);
done = 0;
//记录不重复的电话号码及出现次数
for(int i = 0;i<t;i++)
{
for(int j = i+1;j<t;j++)
{
if(modified[i] == modified[j])
{
count[i] = count[i] + count[j];
modified[j] = -1;
}
}
}
//筛选并输出电话号码簿
for(int i = 0;i<t;i++)
{
if((modified[i]>=0)&&(count[i]>1))
{
OutPut(modified[i]);
printf(" ");
printf("%d\n",count[i]);
done = 1;
}
}
if(!done)
{
printf("No duplicates.");
}
return 0;
}
//电话号码表达式优化函数
void optimize(char* des,char* res)
{
while(*res)
{
switch(*res)
{
case '0':*des = '0';des++;break;
case '1':*des = '1';des++;break;
case 'A':case 'B':case 'C':case '2':*des = '2';des++;break;
case 'D':case 'E':case 'F':case '3':*des = '3';des++;break;
case 'G':case 'H':case 'I':case '4':*des = '4';des++;break;
case 'J':case 'K':case 'L':case '5':*des = '5';des++;break;
case 'M':case 'N':case 'O':case '6':*des = '6';des++;break;
case 'P':case 'R':case 'S':case '7':*des = '7';des++;break;
case 'T':case 'U':case 'V':case '8':*des = '8';des++;break;
case 'W':case 'X':case 'Y':case '9':*des = '9';des++;break;
default:break;
}
res++;
}
}
//电话号码簿输出函数
void OutPut(int num)
{
int former = num/10000;
if(former>=100)
{
printf("%d",former);
}
else
{
if(former<10)
{
printf("00%d",former);
}
else
{
printf("0%d",former);
}
}
printf("-");
int latter = num%10000;
if(latter>=1000)
{
printf("%d",latter);
}
else
{
if((latter<1000)&&(latter>=100))
{
printf("0%d",latter);
}
else
{
if(latter<10)
{
printf("000%d",latter);
}
else
{
printf("00%d",latter);
}
}
}
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator