• BZOJ1299 [LLH邀请赛]巧克力棒


    怎么又是博弈论。。。我去

    Orz hzwer,这道题其实是可以转化成Nim游戏的!

    "第一步:

    先从n根巧克力棒中取出m(m>0)根,使得这m根巧克力棒的xor和为0,同时使得剩下的n-m根巧克力棒无论怎么取,xor和都不为0。

    m根巧克力棒的xor和为0 <=>把nim游戏的必败状态留给对方

    剩下的n-m根巧克力棒无论怎么取,xor和都不为0 <=>  m为巧克力棒的xor和为0的最长子序列

    第二步:

    第一步以后,对手就面临一个必败状态的nim游戏。

    如果他从n-m根中取新的巧克力棒,实际上就是新建一个xor和不为0的nim游戏,这时轮到己方操作只要将这个新的nim游戏取到xor和为0即可。

    也就是让对方再次面临所有nim游戏均为必败状态的局面。"

    于是只要寻找m是否存在即可,由于n = 14,深搜即可。

     1 /**************************************************************
     2     Problem: 1299
     3     User: rausen
     4     Language: C++
     5     Result: Accepted
     6     Time:8 ms
     7     Memory:804 kb
     8 ****************************************************************/
     9  
    10 #include <cstdio>
    11  
    12 using namespace std;
    13 int n, a[20];
    14 bool flag;
    15  
    16 inline int read(){
    17     int x = 0, sgn = 1;
    18     char ch = getchar();
    19     while (ch < '0' || ch > '9'){
    20         if (ch == '-') sgn = -1;
    21         ch = getchar();
    22     }
    23     while (ch >= '0' && ch <= '9'){
    24         x = x * 10 + ch - '0';
    25         ch = getchar();
    26     }
    27     return sgn * x;
    28 }
    29  
    30 void dfs(int x, int cnt, int X){
    31     if (x == n + 1){
    32         if (!X && cnt) flag = 1;
    33         return;
    34     }
    35     if (flag) return;
    36     dfs(x + 1, cnt, X);
    37     if (flag) return;
    38     dfs(x + 1, cnt + 1, X ^ a[x]);
    39 }
    40  
    41 int main(){
    42     for (int t = 1; t <= 10; ++t){
    43         flag = 0;
    44         n = read();
    45         for (int i = 1; i <= n; ++i)
    46             a[i] = read();
    47         dfs(1, 0, 0);
    48         printf(flag ? "NO
    " : "YES
    ");
    49     }
    50     return 0;
    51 }
    View Code
    By Xs酱~ 转载请说明 博客地址:http://www.cnblogs.com/rausen
  • 相关阅读:
    js伪数组转数组内部实现
    Vuex核心部分学习参考地址
    vue中让异步代码变成同步的写法
    node.js中文件操作路径和模板标识路径问题
    如果不想安装cnpm又想使用淘宝的服务器来下载,怎么做?
    npm常用命令
    node中模块加载机制
    通过nodejs,简单模拟客户端和服务端进行通信
    vue中非父子组件的传值
    图论1-2
  • 原文地址:https://www.cnblogs.com/rausen/p/4052548.html
Copyright © 2020-2023  润新知