题意有 n 个糖果从左往右放在桌子上, Alice 和 Bob 吃糖果, Alice可以从左边开始吃, Bob可以从右边开始吃,他们需要连续吃,不能跳过任何一颗糖果,如果 Alice 吃掉了糖果, Bob 就不能吃,反之亦然,他们的目标是吃到等重的糖果。
Sample 1
Inputcopy | Outputcopy |
---|---|
4 3 10 20 10 6 2 1 4 2 4 1 5 1 2 4 8 16 9 7 3 20 5 15 1 11 8 10 | 2 6 0 7 |
#include<iostream>
#include<algorithm>
#include<vector>
#include<bitset>
#include<cmath>
#include<set>
#include<climits>
#include<cstring>//memset头文件
using i64 = int64_t;
using namespace std;
#define endl '\n'
#define int i64
const int maxn = 2e5 + 10;
int num[maxn];void slove()
{int ans = 0,n;cin >> n;for(int i = 1;i <= n;i++)cin >> num[i];int sum1 = 0,sum2 = 0;int i = 1,j = n;while(i <= j){sum1 += num[i];while(sum2 < sum1 && i < j)sum2 += num[j--];if(sum1 == sum2) ans = max(ans,i + n - j);i++;}cout << ans << endl;
}signed main()
{int T = 1;cin >> T;while(T--)slove();return 0;
}