C#求解SPOJ MOHIBPIZ披萨题触发超时如何优化?
问题原因及优化方案
核心性能问题1:递归计算逻辑效率极低
你当前使用的递归函数对应递推规则如下:
- 边界条件:
x ≤ 1时返回2 - 递推规则:
Recursion(x) = Recursion(x-1) + x
该递推式可以直接推导为闭源计算公式,无需递归遍历计算:f(x) = x*(x+1)/2 + 1
使用该公式可以在O(1)时间内得到任意x的结果,彻底避免递归带来的栈开销、函数调用开销以及O(x)的时间复杂度,哪怕x取值极大也不会有性能损耗。
核心性能问题2:输出逻辑未使用快速IO能力
你引入了自定义的快速IO类,但实际输出时使用了普通的StreamWriter.WriteLine方法,没有用到快速IO类的缓冲输出能力,反而多了不必要的IO开销,应该直接调用InputOutput类自带的WriteLineToBuffer方法输出结果。
修改后的核心代码片段
public static void Main() { using (InputOutput io = new InputOutput()) { int T = io.ReadInt(); for (int i = 0; i < T; i++) { int x = io.ReadInt(); int res = x * (x + 1) / 2 + 1; io.WriteLineToBuffer(res); } } } // 其余InputOutput类代码保持不变即可
内容的提问来源于stack exchange,提问作者KaMeR
相关产品推荐
相关产品推荐

