P1288 取数游戏II

P1288 取数游戏II

又是奇怪的博弈论

这道题有很多的结论啊,从题解一个一个抄过来:

  1. 那个先手的想取哪边,整局游戏就能固定取哪边。如果先手想要取某一条边的方向,只需要暴力取光即可,因为后手没办法回去了。
  2. 当第一条边已经被取光的时候,每个人只可能一次把边取光了。否则对手会反手把这条边取光,你就输了。

一旦开始了这种暴力取边的博弈的时候,谁最先碰到天生0边,谁就输了。

因为整个游戏是个环,所以先手有两种机会能赢,而两个方向中只要有一个能赢,那它就会取这个方向,使自己赢。

先手能赢的条件也十分显然:只要两个方向中,存在起点离第一条天生0边距离为奇数时,就赢了。

代码都很简单:

#include<bits/stdc++.h>
using std::cin;
using std::cout;
using std::endl;
const int maxn = 25;
int a[maxn], n;
bool flag1, flag2;
int main() {
    cin >> n;
    for(int i = 1; i <= n; i++) cin >> a[i];
    for(int i = 1; i <= n; i++) {
        if(a[i] == 0) {
            flag1 = !(i % 2); break;
        }
    }   
    for(int i = n; i >= 1; i--) {
        if(a[i] == 0) {
            flag2 = !((n - i + 1) % 2); break;
        }
    }
    if(flag1 || flag2) puts("YES");
    else puts("NO");
    return 0;
}

转载于:https://www.cnblogs.com/Garen-Wang/p/11273547.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值