You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

E-olymp Profit题目代码90%通过率单测试用例错误排查

问题排查与修复

核心bug1:连续子数组总数量计算错误

你当前计算总子数组数量的f值逻辑错误:

for (i = 0; i < n; i++, f += i) {
    cin >> p[i];
}

这段代码算出来的f = 0+1+2+...+(n-1) = n*(n-1)/2,比实际的连续子数组总数n*(n+1)/2少了n个(刚好是所有长度为1的子数组的数量),导致外层循环提前终止,起始位置x>=1的子数组完全没有遍历到,部分测试用例自然结果错误。

比如测试用例n=2,数组为[-5,-3],你的代码只会遍历起始位置为0的子数组[-5]、[-5,-3],不会遍历起始位置为1的子数组[-3],最终输出错误结果-5,正确结果应为-3。

核心bug2:外层循环控制逻辑冗余易错

你用双重变量i和f控制外层循环的逻辑完全没有必要,反而极易出错,直接用起始位置x作为外层循环的控制变量即可,逻辑清晰还不会错。


修复后的代码

#include <iostream>
using namespace std;

int main()
{
    int n, i, q, max, j, x; 
    cin >> n;
    int *p = new int[n]();
    for (i = 0; i < n; i++) {
        cin >> p[i];
    }
    max = p[0];
    // 直接遍历所有起始位置x
    for (x = 0; x < n; x++) {
        q = 0;
        for (j = x; j < n; j++) {
            q += p[j];
            if (q > max) {
                max = q;
            }
        }
    }
    cout << max;
    delete[] p; // 补充释放动态申请的内存
    return 0;
}

优化建议

你当前的暴力枚举解法时间复杂度是O(n²),如果测试用例的n较大(比如n>1e4)会超时,可以改用时间复杂度O(n)的Kadane算法,运行效率更高。

内容的提问来源于stack exchange,提问作者With Orxan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 01:36:04