【模拟】D. Alice, Bob and Candies

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;
}
posted @ 2020-05-10 21:43  StreamAzure  阅读(237)  评论(0编辑  收藏  举报