CF381A Sereja and Dima 題解
阿新 • • 發佈:2021-12-23
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; }