Codeforces 1161C(博弈)
Posted alphawa
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces 1161C(博弈)相关的知识,希望对你有一定的参考价值。
自己的一点想法
- 举几个例子后发现是谁先手痒痒把某一堆掏空了那他就GG了,因此要尽量让对方不得不掏空某堆。
- 用最简单的举例后发现:1 1 1 1 1 1,扔给谁谁完蛋;1 1 1 1 1 2,一样的,肯定得动1的部分;1 1 1 1 2 2,还是败;1 1 1 2 2 2,这个就不一样了,这是胜局面,因为可以不必动1,而且将败局面1 1 1 1 1 1扔给对方。至此可以对要使用的策略有模糊的认知。
- 考虑更常规的:1 2 3 4 5 6,怎么丢给对方差局面?抓2 3 4,使其变成1 1 1 1 5 6,会发现这和1 1 1 1 2 2其实是一样的结局;10 10 20 20 30 30,如果根据之前的认知直观感受,我们抓20 20 30的,变成10 10 10 10 10 30扔给对手,这个情况和1 1 1 1 1 3一样吗?一样。因为对手必须得动最小的那一堆,他这次虽然没有归0,比如变成10 10 10 9 9 29(最后一个随意辣),但我方此时就9 9 9 9 9 29,所以就是赢的。
- 非要较真,就不拿20 20 30的,就要拿10 10 30呢……比如变成9 9 20 20 30 29,那对方就可以下黑手了,将其变成9 9 9 9 9 30,你输了。
- 综上,其实这个博弈的结果一开始就是定好了的,如果与最小的不同的数量小于n / 2,则先手败,否则先手胜。
int n, a[55];
int main()
cin >> n;
rep(i, 0, n - 1) cin >> a[i];
sort(a, a + n);
int dif = 0;
rep(i, 1, n - 1)
if (a[i] != a[0])
dif++;
if (dif < n / 2) puts("Bob");
else puts("Alice");
return 0;
以上是关于Codeforces 1161C(博弈)的主要内容,如果未能解决你的问题,请参考以下文章
CodeForces - 1538A Stone Game博弈
CodeForces - 346A Alice and Bob博弈
CodeForces - 346A Alice and Bob博弈
CodeForces - 794C:Naming Company(博弈&简单贪心)