1. 程式人生 > 其它 >CF381A Sereja and Dima 題解

CF381A Sereja and Dima 題解

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;
}