80分求助
查看原帖
80分求助
342798
Desert_Lycoris楼主2020/8/19 11:44
#include<bits/stdc++.h>
using namespace std;
int n;
long long p, a[1000010], f[1000010], spe[1000010], sco[1000010];
int main()
{
    scanf("%d%d", &n, &p);
    for(int i = 1; i <= n; i++)
    {
        cin >> a[i];
    }
    memset(f, 0x80, sizeof(f));
    memset(spe, 0x80, sizeof(spe));
    memset(sco, 0x80, sizeof(sco));
    f[1] = a[1];
    spe[1] = a[1];
    for(int i = 2; i <= n; i++)
    {
        f[i] = max(f[i-1] + a[i], a[i]);
        spe[i] = max(spe[i-1], f[i]);
    }
    sco[1] = spe[1];
    sco[2] = spe[1] + sco[1];
    /*23行是从40分到80分的关键,第二个分数也是确定的,不能放在循环里求,样例二就会出问题*/
    for(int i = 3; i <= n; i++)
    {
        sco[i] = max(sco[i-1], sco[i-1] + spe[i-1]);
    }
    long long ans = max(sco[1], sco[n]);
    if(ans < 0){ans = abs(ans) % p;cout << -1 * ans;}
    else{cout << ans % p;}
}

求奆佬帮助

2020/8/19 11:44
加载中...