您的位置:首页 > 其它

博弈论 —— The Game of Parity ( CodeForces 549C )

2016-07-14 13:21 507 查看
题目链接:

http://codeforces.com/problemset/problem/549/C

分析:

这道博弈论重在分清楚情况,偶数人数的城多一座少一座并不会改变最终剩余人数的奇偶性,只有奇数人数的城市的数量会对结果产生影响。

题解:

首先先算出奇数人数城市的数量Odd和偶数人数城市的数量Even,再算出可以操作的总次数T。

如果T/2大于Odd,那么Daenerys就可以把所有奇数城市的城市拿走并获得胜利;

如果T/2小于Odd,我们便进行下一步分析,判断最后一个操作的人是谁并且还需要考虑这时偶数人数城市的数量是否被取尽(如果被取尽,那么最后一步操作肯定会改变剩余人数奇偶性)。

最后我们还要考虑一种情况,如果操作数为0的话,这个时候奇数人数城市的个数就能决定整个奇偶性。

AC代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

int main()
{
int n, k;
while(cin >> n >> k)
{
int o=0, e=0;
for(int i=0;i<n;i++)
{
int x;
cin >> x;
if(x&1)
o++;
else
e++;
}
//cout << o << ":" << e << endl;
int res = n - k;
int flag = 0;
if(res>0)
{
if(res/2>=o)
{
flag = 0;
}
else
{
if(res&1)
{
if(res/2>=e && !(k&1) )
flag = 0;
else
flag = 1;

}
else
{
if(res/2>=e && (k&1))
flag = 1;
else
flag = 0;
}
}
}
else
{
if(o&1)
flag = 1;
else
flag = 0;
}

if(flag)
cout << "Stannis" << endl;
else
cout << "Daenerys" << endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  博弈论-ACM