ACM题目如何避免超时?有啥技巧吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ACM题目如何避免超时?有啥技巧吗?相关的知识,希望对你有一定的参考价值。

算法很重要,不过如果算法不扎实也可以使用一点小技巧。比如尽量不要使用java语言,java的效率是公认的差的要命的,如果可以尽量使用C与C++。而输入输出尽量使用printf()和scandf(),而不要使用cin和cout。前种方式要比后种方式快了好几倍(当然在需要大规模的输入输出的时候才有效)。一些常用的数据学会建立数组保存数据,比如求阶乘,不要傻傻的每个数都从1开始乘,学会建立数组,把计算过的阶乘都算出来,这样如果需要计算新的数只要从原有的数继续计算就可以了(这个是递推算法的思想)。还有就是尽量减少函数调用。比如程序代码:
for(int i=0;i<=x;i++)

he=sun(1,2);//在循环里调用函数,如果这个循环次数很多,则效率非常低。
a=a+he;//变量he应该是个常数,如果把上面的赋值式子放到循环外面,则效率会好很多

正确使用stl,这个是把双刃剑,有时候能很大的增进效率,有时候却能让程序超时。这个没法说,自己多学学。多练练,自己体会。
也就能想到这么多,当然,ACM主要还是考验算法上的功底,所以算法的根基是必须打好的。还有一点可以注意一下,如果输入数据范围过大(比如2的100次方或者50!),那么这个题一定是让你找规律的题。千万不要用普通的方法去做,否则必然超时
还有超时的可能性很多,千万不要忘了写输出语句或者进入无限循环哦,这点不多说。
祝你考个好成绩
参考技术A 设计较高效率的算法,以得到较低的时间复杂度,比如计算1到n的和,从头到尾+一次需要算n次,时间复杂度是O(n),但是运用求和公式就与n的大小无关,复杂度为O(1)。
具体的算法有很多,例如贪心,动态规划,图论,计算几何等等,涉及面很广,先掌握这些算法,之后再熟练运用,学会分析题目,就会慢慢学到不超时的技巧了。
参考技术B 避免超时的唯一办法就是想一个更快的算法。
一般ACM能用O(nlogn)或者O(n)来做的题目,就不会让O(n^2)或以上的算法的AC
能用O(n^2logn)或者O(n^2)的算法解决的, 就不会让O(n^3)或以上的算法AC,

如此类推.本回答被提问者采纳
参考技术C 主要是复杂度的问题,建议你读:
<Introduction to Algorithms>
by Cormen, Leiserson, Rivest, and Stein

为啥要避免动态 SQL 查询?有啥建议可以删除坏的部分并使用这些吗?

【中文标题】为啥要避免动态 SQL 查询?有啥建议可以删除坏的部分并使用这些吗?【英文标题】:Why to avoid dynamic SQL queries ? any suggestion to remove there bad part and to use these?为什么要避免动态 SQL 查询?有什么建议可以删除坏的部分并使用这些吗? 【发布时间】:2011-09-15 12:52:42 【问题描述】:

您能指导我为什么建议避免使用动态 SQL 吗?有什么方法可以让我继续使用动态 SQL 并避免它的坏事?

【问题讨论】:

【参考方案1】:

http://www.sommarskog.se/dynamic_sql.html

如果您不了解本文中的所有内容,请返回并提出问题,但在您理解本文之前,在任何情况下都不应使用动态 SQl。

【讨论】:

【参考方案2】:

主要问题是sql注入。人们可以输入可以改变 sql 意图的数据。

最好的解决方案之一是使用 sp_executesql。 http://msdn.microsoft.com/en-us/library/ms188001.aspx

【讨论】:

以上是关于ACM题目如何避免超时?有啥技巧吗?的主要内容,如果未能解决你的问题,请参考以下文章

oi赛制啥意思

在acm上Java程序要有啥格式吗?

ACM 刷题小技巧

ACM题目————Anagram

acm的做题技巧

有一种acm题目叫做,奇葩!