CF1006C题解
Mr_Dolphin · · 题解
双向前缀和
看到dalao们用标记,瑟瑟发抖。萌新这里用前缀和数组+for循环代替了。(个人认为较容易理解)
前置知识
定义一个数组,第
方法
定义两个数组,一个是前缀和,另一个是反向的前缀和。因为本题要求前
代码实现
#include<iostream>
using namespace std;
int n,d[200001],a[200001],b[200001],ans;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>d[i];
a[i]=a[i-1]+d[i];//前缀和
}
for(int i=n;i>0;i--)
{
b[i]=b[i+1]+d[i];//反向前缀和
}
for(int i=0;i<n+1;i++)//注意可以为零
{
for(int j=n+1;j>=i;j--)//j与i可相等
{
if(b[j]==a[i])//符合条件,更新答案
{
ans=max(ans,a[i]);
}
else
{
if(b[j]>a[i])//b[j]只会越来越大,所以不再相等,跳出循环
{
continue;
}
}
}
}
cout<<ans;
return 0;//完结撒花
}
有什么错误,请dalao轻喷。
QAQ第一篇题解,求过QAQ