避免 Time Limit Exceeded
来源:互联网 发布:iphone7如何删除软件 编辑:程序博客网 时间:2024/04/29 16:30
经常会遇到这种令人抓狂的情况
自己编写的程序在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.程序本身存在问题。
- 避免 Time Limit Exceeded
- Time Limit Exceeded是超时,该如何避免呢?
- uva131 Time limit exceeded
- Time Limit Exceeded 解析
- E. Time Limit Exceeded?
- Time Limit Exceeded
- SPOJ Time Limit Exceeded
- Time Limit Exceeded 原因
- ACM中关于Output Limit Exceeded和Time Limit Exceeded
- ACM中关于Output Limit Exceeded和Time Limit Exceeded
- 10044-Erdos number Time limit exceeded
- POJ 1423. BigNumber (Time Limit Exceeded)
- spoj 2829 Time Limit Exceeded (DP)
- Sicily 1063 Time Limit Exceeded我日
- 关于Time Limit Exceeded可能的原因
- UVa694 - The Collatz Sequence:Time limit exceeded
- 4.【Hard】LRU Cache--Time Limit Exceeded
- Time limit exceeded 出现的原因
- 在 ununtu 9上安装 redis 4.0.2
- spark中RDD、DataFrame创建及互相转换
- Python Decorators入门 (一)
- sls编写
- Spring框架之IoC容器—HierarchicalBeanFactory接口
- 避免 Time Limit Exceeded
- 人工智能到底有多火,年薪 25 万只是白菜价
- 坚持#第225天~零基础自学云计算基础语言应用之Shell23~27节
- python进阶——多进程
- 浅谈程序复杂度的常数优化
- 【JavaWeb】SpringMVC定时任务
- 常用快递物流查询接口对接案例
- HTTP_REFERER的用法及伪造
- spring多数据源的处理 mybatis实现跨库查询 实现Myibatis动态sql跨数据库的处理 Spring动态配置多数据源,即在大型应用中对数据进行切分,并且采用多个数据库实例进行管理,这样