题目链接
题意:
两个人吃糖果,每次吃的数量必须比上一个人吃的多,给你一个数组(糖果堆),每一堆有随机数量的糖果,a从左边开始吃,b从右边开始吃,必须吃整队的糖果,a先开始,然后b再吃,注意,后面所吃的糖果数必须严格大于之前吃的。
思路:
应该算是一个模拟,建立一个数组代表糖果堆,然后用两个循环模拟吃糖果的方式。
代码:
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
const int N=1e6+5;
const int inf=0x3f3f3f3f;
int sum[N],ma[N];
signed main()
{
int t;
cin>>t;
while(t--)
{
int n,arr[200005],a=0,b=0,mx=0,num=0;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>arr[i];
}
int sum=0,j=n-1;
for(int i=0;i<n;i++)
{
sum+=arr[i];
a+=arr[i];
if(i==j)
{
num++;
break;
}
if(sum>mx)
{
num+=2;
mx=sum;
sum=0;
for(j;j>=0;j--)
{
if(i==j)
break;
sum+=arr[j];
b+=arr[j];
if(sum>mx)
{
mx=sum;
sum=0;
j--;//小细节
break;
}
}
}
if(i==j)
{
break;
}
}
cout<<num<<' '<<a<<' '<<b<<endl;
}
}