20分,dalao救我5555 感激不尽!
查看原帖
20分,dalao救我5555 感激不尽!
742723
SSSSiJin楼主2022/7/2 22:39

dalao救命5555为什么这样写不对,找不出毛病来

/*
 * 欢迎访问四金的世界!
 * https://4jin.cc
 * 学习的路上一起进步~
 *
 * 本题使用「前缀和」完成
 */
#include <iostream>
#include <algorithm>

using namespace std;

struct Sum {
    int num;
    long long int value;

    bool operator<(const Sum &Compare) {
        return this->value > Compare.value;
    }
};

int main() {
    long long int N, i, temp;
    //读入数据
    cin >> N;
    struct Sum total[N + 1];
    total[0].value = 0;
    total[0].num = 0;
    for (i = 1; i <= N; i++) {
        cin >> temp;
        total[i].value = total[i - 1].value + temp;
        total[i].num = i;
    }
    sort(total, total + N + 1);
    //处理数据
    //for (i = 0; i <= N; i++) {
    //cout << total[i].value <<"   "<<total[i].num<< endl;
    //}
    long long int result = -99999;
  //优化后
    int loc = N;
    for (i = 0; i <= N; i++) {
        if (total[i].num < total[loc].num) {
            loc--;
            continue;
        }
        if (total[i].value > total[loc].value &&
            (total[i].value - total[loc].value) > result) {
            result = total[i].value - total[loc].value;
        }
    }
    cout << result;
    return 0;
}
2022/7/2 22:39
加载中...