问题标题: sd

0
0
已解决
刘意阳
刘意阳
初级天翼
初级天翼
#include <iostream>
using namespace std;
long long n,p,maxn,x,pd,a[1000001][3];
int main(){
    cin>>n>>p;
    p=abs(p);
    long long x;
    cin>>x;
    a[1][1]=x;
    a[1][0]=x;
    maxn=x;
    for(long long i=2;i<=n;i++){
        cin>>x;
        if(a[i-1][1]>0){
            a[i][1]=a[i-1][1]+x;
        }else{
            a[i][1]=x;
        }
        a[i][0]=max(maxn,a[i][1]);
        maxn=a[i][0];
    }
    a[1][2]=a[1][0];
    a[2][2]=2*a[1][0];
    if(a[2][2]>=a[1][2]){
        pd=1;
    }
    for(long long i=3;i<=n;i++){
        if(a[i-1][0]<0){
            a[i][2]=a[i-1][2];
        }else{
            a[i][2]=a[i-1][2]+a[i-1][0];
            if(a[i][2]>a[1][2]){
                pd=1;
            }
            if(a[i][2]>1000000000){
                a[i][2]%=p;
            }
        }
    }
    if(pd==1){
        cout<<a[n][2]%p;
    }else{
        cout<<a[1][2]%p;
    }
    return 0;
}

 


0
我要回答