记录编号 |
133049 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[NOIP 2013PJ]小朋友的数字 |
最终得分 |
100 |
用户昵称 |
RP++ |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.388 s |
提交时间 |
2014-10-27 06:35:17 |
内存使用 |
15.57 MiB |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
long long s[1000010]={0};
long long f[1000010]={0};
int main()
{
freopen("number2013.in","r",stdin);
freopen("number2013.out","w",stdout);
long long nPeo,p;
scanf("%lld%lld",&nPeo,&p);
long long num;
for(int i=1;i<=nPeo;i++)
{
scanf("%lld",&num);
s[i]=s[i-1]+num;
}
long long mmin=0;
if(s[1]<0)mmin=s[1];
f[1]=s[1];
for(int i=2;i<=nPeo;i++)
{
f[i]=max(f[i-1],s[i]-mmin);
if(s[i]<mmin)mmin=s[i];
}
long long mmax=f[1]*2;
long long ans=f[1];
bool flag=false;
for(int i=2;i<nPeo;i++)
{
if(f[i]>0)
{
mmax=(mmax%p+f[i]%p)%p;
if(f[i]>abs(f[1]))flag=true;
}
}
if(mmax<ans&&!flag)mmax=ans;
printf("%lld",mmax%p);
}
/*5 981
-409 -401 97 -96 -301 */
/*10 711
907 -565 310 643 -111 -180 -426 -758 -901 253*/