首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

ACM OJ 上一标题 总超时间限制 求解释

2013-04-20 
ACM OJ 上一题目 总超时间限制 求解释先贴上 题目地址http://icpc.ahu.edu.cn/OJ/Problem.aspx?id515代码

ACM OJ 上一题目 总超时间限制 求解释
先贴上 题目地址
http://icpc.ahu.edu.cn/OJ/Problem.aspx?id=515

代码

#include<stdio.h>
#include<string.h>
int main()
{
int N,n=0,i,j,k;
char in[10002][21],out[10002][21],tou[21],*p;
scanf("%d",&N);
getchar();
for(i=0;i<N;i++)
gets(in[i]);
gets(tou);
for(i=0;i<N;i++)
{
p=strstr(in[i],tou);
if(p==in[i])
{
n++;
if(n==1) strcpy(out[0],in[i]);
else
{
for(j=0;j<n-1;j++)
if(strcmp(in[i],out[j])<0) break;
for(k=n-1;k>=j+1;k--)
strcpy(out[k],out[k-1]);
strcpy(out[j],in[i]);
}
}
}
for(i=0;i<n;i++)
printf("%s\n",out[i]);
return 0;
}

OJ给的反应
Time Limit Exceeded
Extended Results: r+++++++++
哪儿耗用时间多了?
如果想用类似 数大小 的排序,那么与前缀无关的字符怎么弄?
还有  我的运行 结果正确吧
可以给我说一下 怎么弄

[解决办法]
N=10000你还用O(n^2)的算法,当然超时。
[解决办法]
先将所有数输入,然后找T开头的所有字符串,放到一个优先队列中,然后按照顺序取出来就可以了,复杂度O(n*logn)。
或者将所有数全部输入,然后对字符串排序,然后取出开头为T的所有字符串。
[解决办法]
不能用N^2的排序,要用n*logn的排序,n^2就超时了,比如调用algorithm库里面的sort或者qsort快排进行排序。

热点排行