Codeforces 693 D. Even-Odd Game

Codeforces 693 D. Even-Odd Game_第1张图片
Codeforces 693 D. Even-Odd Game_第2张图片

题意分析:

给定一个数组,Alice和Bob轮流抽取数组中的数,
(1)当Alice抽取的是偶数,Alice的分数加上这个数;如果是奇数,Alice不加分
(2)当Bod抽取的是奇数,Bob的分数加上这个数;如果是偶数,Bob不加分

那么我们分别来看一下奇数和偶数给Alice和Bob的情况:(score来记录分差
(1)如果是偶数的话,给Alice的话,score+x ,给Bob的话,score不变
(2)如果是奇数的话,给Alice的话,score+0,给Bob的话,score-x

那么,Alice想要将score最大,Alice一直拿最大的数;Bob也同样如此。
答案可能爆int

#include 
#include 
#include 

using namespace std;

void solve()
{
     
	int n; cin >> n;
	vector<int> a(n);
	for(int i = 0; i < n; i++) cin >> a[i];
	sort(a.rbegin() , a.rend()); // 使用逆迭代器,从大到小排序 
	
	long long s = 0; // 记录分数 
	for(int i = 0; i < n; i++)
	{
     
		if(i % 2 == 0) // Alice
		{
     
			if(a[i] % 2 == 0) s += a[i];
		}else // Bob
		{
     
			if(a[i] % 2) s -= a[i];
		}
	}
	if(s > 0) puts("Alice");
	else if(!s) puts("Tie");
	else puts("Bob");
}

int main()
{
     
	int t; cin >> t;
	while(t--) solve();
	return 0;
}

你可能感兴趣的:(c++,cf,算法)