Time Limit Exceeded的原因及避免方法

经常会遇到这种令人抓狂的情况

自己编写的程序在codeblocks上怎么编译运行都能输出正确结果

然而一提交,却无法Accept,很多时候显示的并不是Wrong Answer 而是比WrongAnswer更令人绝望的  。

在oj中,给定的Time Limit 是1000MS,出现Time Limit  Exceeded则说明这个程序的运行时间超过了这个限度。

经过几道题,我猜想了几个关于超时的原因:

————————————————————————————————————————————————————

1.没有循环终止条件。

就是说程序中存在一个循环,但是这个循环没有终止条件,或者说是条件太宽泛,在运行的时候虽然能输出结果,但这个循环会一直循环下去,导致运行时间过长。

例如:

在1001中,要测试多组数据,进行多次循环,

如果这样写

for(m=0;m>0;m++)

scanf(.......)

......

企图让输入一直循环,理论上并没有什么问题,程序也能运行正确,但却会超时。

因为没有一个终止的条件,计算机会一直不断去运行,m只会无限大,这是实际一种很无赖的做法。

而如果要想用一个合理的方式实现无限次循环,就需要用

while(scanf()!=EOF)

......

这里虽然也可无限次的循环,却有了终止条件:返回值为-1 的时候

关于while(scanf()!=EOF)的用法原理,

我再网上查阅得到:

  scanf("%d,%d", &a, &b)中

  如果a和b都被成功读入,那么scanf的返回值就是2

    如果只有a被成功读入,返回值为1

如果a和b都未被成功读入,返回值为0

 如果遇到错误或遇到end of file,返回值为EOF。

——————————————————————————————————————————————————————

2.函数调用超时。

例如:

在1279中,需要用到一个n的阶乘。

在第一次做的时候,我调用了一个递归函数来求阶乘,运行测试正确,却出现了超时情况。

然后换了一种做法,用一个for循环去求阶乘,结果就通过了。

我上网查询得到,递归调用因为经常会调用自身很多次,所以时间的复杂度是指数级别的。

——————————————————————————————————————————————————————

3.程序算法不够优化。

就是说自己的程序太复杂,存在更快更有效率的方法。

所以在解决问题时,应尽量选择简单的算法。

如果遇到了这种情况,只能换一个思路了。

——————————————————————————————————————————————————————

4.程序本身存在问题。

转载自:https://blog.csdn.net/MTOY_320/article/details/78363375?locationNum=7&fps=1

原文地址:https://www.cnblogs.com/mjn1/p/11266532.html

时间: 2024-11-09 09:47:28

Time Limit Exceeded的原因及避免方法的相关文章

java.lang.OutOfMemoryError:GC overhead limit exceeded填坑心得

我遇到这样的问题,本地部署时抛出异常java.lang.OutOfMemoryError:GC overhead limit exceeded导致服务起不来,查看日志发现加载了太多资源到内存,本地的性能也不好,gc时间消耗的较多.解决这种问题两种方法是,增加参数,-XX:-UseGCOverheadLimit,关闭这个特性,同时增加heap大小,-Xmx1024m.坑填了,but why? OOM大家都知道,就是JVM内存溢出了,那GC overhead limit exceed呢? GC ov

eclipse一直报An internal error occurred during: "Building workspace". GC overhead limit exceeded

最近导入到eclipse里的工程挺大的,每次eclipse启动之后都回update workspace,然后就一直报: An internal error occurred during: "Building workspace". GC overhead limit exceeded 这个错误. 解决方法: 原因是Eclipse默认配置内存太小需要更改Eclipse安装文件夹下的eclipse.ini文件. Eclipse.ini默认文件如下: 修改如下: -Xms512m -Xmx

java.lang.OutOfMemoryError: GC overhead limit exceeded解决

异常表现 Exception in thread “main” java.lang.OutOfMemoryError: GC overhead limit exceeded 异常原因 JDK6新增错误类型.当GC为释放很小空间占用大量时间时抛出. 一般是因为堆太小.导致异常的原因:没有足够的内存. 解决方法 1.查看系统是否有使用大内存的代码或死循环. 2.可以添加JVM的启动参数来限制使用内存:-XX:-UseGCOverheadLimit

[转]java.lang.OutOfMemoryError:GC overhead limit exceeded

我遇到这样的问题,本地部署时抛出异常java.lang.OutOfMemoryError:GC overhead limit exceeded导致服务起不来,查看日志发现加载了太多资源到内存,本地的性能也不好,gc时间消耗的较多.解决这种问题两种方法是,增加参数,-XX:-UseGCOverheadLimit,关闭这个特性,同时增加heap大小,-Xmx1024m.坑填了,but why? OOM大家都知道,就是JVM内存溢出了,那GC overhead limit exceed呢? GC ov

GC overhead limit exceeded填坑心得

我遇到这样的问题,本地部署时抛出异常java.lang.OutOfMemoryError:GC overhead limit exceeded导致服务起不来,查看日志发现加载了太多资源到内存,本地的性能也不好,gc时间消耗的较多.解决这种问题两种方法是,增加参数,-XX:-UseGCOverheadLimit,关闭这个特性,同时增加heap大小,-Xmx1024m.坑填了,but why? OOM大家都知道,就是JVM内存溢出了,那GC overhead limit exceed呢? GC ov

eclipse:gc overhead limit exceeded

转自:http://jingyan.baidu.com/article/0a52e3f419f60dbf62ed7212.html 大家经常遇到运行java程序内存不足修改内存不足的方法如下:Eclipse报错:gc overhead limit exceeded eclipse原因是Eclipse默认配置内存太小需要更改Eclipse安装文件夹下的eclipse.ini文件.修改如下:-Xms512m -Xmx1024m第一个是最小的初始化内存,第二个是最大的占有内存还可以加上 -XX:Max

gc overhead limit exceeded eclipse

在Eclipse打包的时候报错:gc overhead limit exceeded eclipse 原因是Eclipse默认配置内存太小需要更改Eclipse安装文件夹下的eclipse.ini文件. Eclipse.ini默认文件如下: -startup plugins/org.eclipse.equinox.launcher_1.3.0.v20140415-2008.jar --launcher.library plugins/org.eclipse.equinox.launcher.wi

gc overhead limit exceeded eclipse解决方案

Eclipse报错:gc overhead limit exceeded eclipse 原因是Eclipse默认配置内存太小需要更改Eclipse安装文件夹下的eclipse.ini文件. Eclipse.ini默认文件如下: 修改如下: -Xms512m -Xmx1024m 第一个是最小的初始化内存,第二个是最大的占有内存 还可以加上 -XX:MaxPermSize=1024m这个意思是在编译文件时一直占有最大内存,重启Eclipse

小程序 Dom limit exceeded

问题1: Dom limit exceeded怎么回事?iphone版的可以安卓的就不行 是返回的json文件太长吗?不应该啊这才哪跟哪啊?文档里也找不出有什么限制.在开发工具里和iphone里都没出现 解决办法:去掉源文件的bom头就可以了,使用clearbom.php清理bom 问题2: "DOM limit exceeded"的原因:出于性能考虑,结点总量有个限制,所以请不要在页面中使用过多节点.就是说循环列表不要超过350个 原文地址:https://www.cnblogs.c