Codeforces Round 640 (Div. 4)
D. Alice, Bob and Candies
题意:两个人轮流吃数组,一个从左端开始(第一次只吃a[1]),另一个从右端开始,吃掉的元素和必须严格大于上一个人吃掉的元素和,数组全吃完时结束。输出回合数以及两人分别吃掉了多少。
思路:模拟
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstring>
using namespace std;
int a[8000];
int main()
{
int t;
cin >> t;
while (t--) {
int n;
cin >> n;
for (int i = 1; i <= n; i++) cin >> a[i];
int num = n;
int R = 1;//标记玩家
int last=a[1]-1;//第一轮只吃a[1]
int left = 0, right = n + 1;
int A = 0, B = 0, move = 0;
while (num>0) {//num表示还能吃的元素个数
move++;
int sum = 0;
//一个一个吃,只要sum还没超过last就继续吃
if (R == 1) {
while (sum<=last&&num>0) {
num--;
sum += a[++left];
}
A += sum;//记录A吃掉的总积分
}
else {
while (sum <= last && num > 0) {
num--;
sum += a[--right];
}
B += sum;//记录B吃掉的总积分
}
last = sum;//记录这吃掉的积分
R = 1 - R;//换人
}
cout << move << " " << A << " " << B << endl;
}
return 0;
}