思路:
双指针,从第一行最右边和第二行最左边开始,尽量让两个指针所划过的数有着最小的差值,当两指针相遇时,便是爱丽丝拐弯的地方。
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<algorithm>
#include<map>
#include<queue>
#include<math.h>
using namespace std;
#define ll long long
ll a[10][100010];
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
for(int i = 1; i <= n; i++)
cin>>a[1][i];
for(int i = 1; i <= n; i++)
cin>>a[2][i];
int flag = 0,maxx = 0x3f3f3f3f;
ll ans = 0;
int l = 1,r = n;
ll lsum = 0,rsum = 0;
if(a[1][r] > a[2][l])
{
lsum += a[2][l];
r = n+1;
}
else
{
rsum += a[1][r];
l = 0;
}
while(l < r)
{
if(lsum > rsum)
{
rsum += a[1][--r];
}
else
{
lsum += a[2][++l];
}
}
ll sum1 = 0,sum2 = 0;
for(int i = 1; i < r; i++)
{
if(i != n)
sum1 += a[2][i];
}
for(int i = r+1; i <= n; i++)
sum2 += a[1][i];
cout<<max(sum1,sum2)<<endl;
}
}