网站建设专项检查,wordpress app 源码,网站开发与部署题库,开网站建设公司心得题意:
alice和bob从数组两边的吃糖果, 数组的值就是糖果重量
要求alice和bob吃的糖果重量必须一样, 输出能吃几个糖果
这题最先想到的是前后缀相加
模拟一个前缀和 和 后缀和
在n/2的位置向前找前缀和
在n/2的位置向后找后缀和
找到第一个前缀和后缀和的下标输出就好 …题意:
alice和bob从数组两边的吃糖果, 数组的值就是糖果重量
要求alice和bob吃的糖果重量必须一样, 输出能吃几个糖果
这题最先想到的是前后缀相加
模拟一个前缀和 和 后缀和
在n/2的位置向前找前缀和
在n/2的位置向后找后缀和
找到第一个前缀和后缀和的下标输出就好
但这种做法有个缺点, 因为前缀和对应相等的后缀和下标不一定是i与n-i的关系, 做起来还是需要用双指针, 那既然用了双指针, 而且前缀和 和 后缀和的访问次数只需要找到第一个(或者说, 最后一个)相等的就行
那为什么不用直接双指针模拟呢?就不需要前缀和这种繁琐的做法了, 还要多模拟一个数组
创建双指针l和r, 创建q和p分别储存alice和bob吃的糖果重量
每当alice吃的糖果小于bob的糖果时alice多吃, 否则bob多吃
每当两者相等时, 更新一下答案即可
void solve()
{cinn;vectorllv(n1);for(int i0;in;i) cinv[i];ll l0,rn-1;ll q0,p0;ans0;while(lr){if(qp) qv[l];else pv[r--];if(pq) ansl(n-1-r);}coutansendl;return;
}