题意:桌子上将卡牌摆成一行,S和D两个人选卡牌(只能选最左和最右边的牌),来使她们的总点数最大。
桌上卡牌没了,则游戏结束。
S为先手
思路:模拟,双指针,贪心。
定位数组的左右两端,双指针向中间移动,知道双指针指向同一个元素,同时判断轮到谁摸牌了。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e5 + 10;
int n,t,m;
int a[N],b[N],c[N];
bool vis[N];
int main(){
cin >> n;
int u = n;
int s = 0, d = 0;
for(int i = 0; i < n; i++){
cin >> a[i];
}
int i = 0, j = n - 1, flag = 1;
while(i != j){
if(a[i] > a[j]){
if(flag == 1){
s += a[i];
flag = 0;
}
else{
d += a[i];
flag = 1;
}
i++;
}
else{
if(flag == 1){
s += a[j];
flag = 0;
}
else{
d += a[j];
flag = 1;
}
j--;
}
u--;
}
if(flag == 1){
s += a[i];
}
else{
d += a[i];
}
cout << s << " " << d << endl;
return 0;
}