题意:
alice和bob从数组两边的吃糖果, 数组的值就是糖果重量
要求alice和bob吃的糖果重量必须一样, 输出能吃几个糖果
这题最先想到的是前后缀相加
模拟一个前缀和 和 后缀和
在n/2的位置向前找前缀和
在n/2的位置向后找后缀和
找到第一个前缀和==后缀和的下标输出就好
但这种做法有个缺点, 因为前缀和对应相等的后缀和下标不一定是i与n-i的关系, 做起来还是需要用双指针, 那既然用了双指针, 而且前缀和 和 后缀和的访问次数只需要找到第一个(或者说, 最后一个)相等的就行
那为什么不用直接双指针模拟呢?就不需要前缀和这种繁琐的做法了, 还要多模拟一个数组
创建双指针l和r, 创建q和p分别储存alice和bob吃的糖果重量
每当alice吃的糖果小于bob的糖果时alice多吃, 否则bob多吃
每当两者相等时, 更新一下答案即可
void solve()
{cin>>n;vector<ll>v(n+1);for(int i=0;i<n;i++) cin>>v[i];ll l=0,r=n-1;ll q=0,p=0;ans=0;while(l<=r){if(q<p) q+=v[l++];else p+=v[r--];if(p==q) ans=l+(n-1-r);}cout<<ans<<endl;return;
}