题目
分析
合并显然要从两边开始合,才能保证回文,由于都是正数,所以是不可逆的,故两个指针从两边往中间靠即可。
题目
#include<cmath>
#include<queue>
#include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
using namespace std;
int read(){
int x=0,f=1;char c=getchar();
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9')x=(x<<3)+(x<<1)+(c^48),c=getchar();
return x*f;
}
#define MAXN 1000000
int N;
int A[MAXN+5];
int main(){
freopen("nizin.in" ,"r", stdin);
freopen("nizin.out","w",stdout);
N=read();
for(int i=1;i<=N;i++)
A[i]=read();
int Left=1,Right=N,Ans=0;
long long lSum=0,rSum=0;
while(Right-Left>=-1){
if(lSum<rSum)
lSum+=A[Left++],Ans++;
else if(lSum>rSum)
rSum+=A[Right--],Ans++;
else
lSum=A[Left++],rSum=A[Right--];
}
printf("%d",Ans);
}