求助(是不是题目理解错了?)
查看原帖
求助(是不是题目理解错了?)
377947
小小师妹楼主2021/10/22 21:20
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int inf=0x3f3f3f3f;
int main()
{
    int n,p;
    cin>>n>>p;
    long a[n+1],dp[n+1],point[n+1];
    memset(dp,0,sizeof(dp));
    memset(point,0,sizeof(point));
    dp[0]=point[0]=-inf;
    for(int i=1;i<=n;i++)
    {
        scanf("%ld",&a[i]);
        if(dp[i-1]>0)
        {
            if(a[i]>=0) dp[i]=(dp[i-1]%p+a[i]%p)%p;
            else dp[i]=dp[i-1]%p;
        }
        else
        {
            if(a[i]>=dp[i-1]) dp[i]=a[i]%p;
            else dp[i]=dp[i-1]%p;
        }
        //cout<<dp[i]<<" ";
    }
    //cout<<endl;
    long ans=dp[1],maxi=dp[1]+dp[1];
    point[1]=dp[1];
    for(int i=2;i<=n;i++)
    {
        maxi=max(maxi,point[i-1]+dp[i-1]);
        point[i]=maxi;
        ans=max(point[i],ans);
        //cout<<point[i]<<" ";
    }
    //cout<<endl;
    cout<<ans<<endl;
    return 0;
}
2021/10/22 21:20
加载中...