CF381A Sereja and Dima 题解

Content

小 S 和小 D 在玩一个游戏,游戏一开始,桌面上有 \(n\) 张牌,从左往右的分值依次是 \(a_1,a_2,a_3,...,a_n\)保证 \(a_i\) 互不相等),现在,小 S 和小 D 轮流取两边牌,每次都会取两边的牌中分数较大的一个。小 S 先取,当 \(n\) 张牌全部取完时,游戏结束,求此时小 S 和小 D 的分数。

数据范围:\(1\leqslant n\leqslant 1000,1\leqslant a_i\leqslant 1000\)

Solution

在游戏开始后,每次取走两边中分值较大的牌,并更新目前的左边界和右边界和玩家的分数,直到左边界和右边界相等(也就是取完了)为止,就可以得到我们想要的答案了。

Code

#include <cstdio>
#include <algorithm>
using namespace std;

int n, a[1000007], sum[3];

int main() {
	scanf("%d", &n);
	for(int i = 1; i <= n; ++i)
		scanf("%d", &a[i]);
	int l = 1, r = n, turn = 1;
	while(l <= r) {
		if(a[l] < a[r])
			sum[turn] += a[r--];
		else
			sum[turn] += a[l++];
		turn = -turn + 3;
		/*
			当turn=1时,更新后的turn=-1+3=2。
			当turn=2时,更新后的turn=-2+3=1。 
		*/
	}
	return printf("%d %d", sum[1], sum[2]), 0;
}
posted @ 2021-12-23 20:16  Eason_AC  阅读(39)  评论(0)    收藏  举报