381A. Sereja and Dima
Sereja 和 Dima 在玩一个游戏。游戏规则非常简单。玩家有一排 n 张牌。每张牌上都有一个数字,牌上的所有数字都是不同的。玩家轮流出牌,Sereja 先出牌。在他的回合中,玩家可以拿一张牌:要么是一排中最左边的牌,要么是最右边的牌。当没有牌时,游戏结束。游戏结束时,牌上数字总和最大的玩家获胜。
Sereja 和 Dima 都很贪心。他们每个人在移动过程中都会选择数字较大的牌。
Inna 是 Sereja 和 Dima 的朋友。她知道这两个人使用的是哪种策略,因此她想根据游戏的初始状态来确定最终得分。请帮助她。
输入
第一行包含整数 n(1 ≤ n ≤ 1000) - 牌桌上的牌的数量。第二行包含从左到右以空格分隔的纸牌上的数字。纸牌上的数字是从 1 到 1000 的不同整数。
输出
在一行中打印两个整数。第一个数字是比赛结束时 Sereja 的积分,第二个数字是比赛结束时 Dima 的积分。
例如
输入
4
4 1 2 10
输出
12 5
输入
7
1 2 3 4 5 6 7
输出
16 12
注意
在第一个示例中,Sereja 将拿编号为 10 和 2 的牌,因此 Sereja 的和为 12 。迪玛将取数字为 4 和 1 的牌,因此迪玛的和为 5 。
解决方法
// codeforces
// 381A. Sereja and Dima
# include<iostream>
# include<vector>
using namespace std;
void delete_num(int a[], int k,int b)
{
for(int i = k; i < b; i++)
{
a[i] = a[i+1];
}
}
int main()
{
int n, flag = 0, s=0, d=0, x, b, e;
cin >> n;
int a[n];
for(int i = 0; i < n; i++)
{
cin >> a[i];
}
for(int i = 0; i < n; i++)
{
if(flag == 0)
{
if(a[0] > a[n-i-1])
{
s = s + a[0];
delete_num(a, 0, n-i);
}
else
{
s = s + a[n-i-1];
delete_num(a, n-i-1, n-i);
}
flag =1;
}
else
{
if(a[0] > a[n-i-1])
{
d = d + a[0];
delete_num(a, 0, n-i);
}
else
{
d = d + a[n-i-1];
delete_num(a, n-i-1, n-i);
}
flag = 0;
}
}
cout << s << ' ' << d << endl;
return 0;
}