题目链接
题目的核心思想是利用nim博弈来解决;
题意:有m堆牌,两个人先后取某堆中的任意(不少于一)张牌,最后取完者胜;问先手取胜第一次取牌有多少种取法。

题意:有m堆牌,两个人先后取某堆中的任意(不少于一)张牌,最后取完者胜;问先手取胜第一次取牌有多少种取法。
思路:1)如若给出 的是必败状态:a1^a2 ^…an=0,则先手不会有任何可能获得胜利;(必定后者胜);
2)若给出的是必胜状态:a1 ^ a2 ^ …^ an=k,(其中k不为零),那么我们的目的是要把必胜状态转化为必败状态从而使得先手胜利。若a1^ a2^ …^ an!=0,一定存在某个合法的移动,将ai 改变成ai’后满足a1 ^ a2^ …^ ai’^ …^ an=0。若a1^ a2^ …^an=k,则一定存在某个ai, 它的二进制 表示在k的最高位上是1(否则k的最高位那个1是怎么得到的)。(或者说各个ai的最高位的1是奇数个,才能保证为1)
这时ai^ k<ai一定成立。则我们可以将ai改变成ai’=ai^ k,此时a1^ a2ai’an=a1^ a2^ …^ an^ k=0。
eg:101^ 110^ 100(二进制)=111;
再拿111^ 101^ 110^ 100=0;(使1的个数都变为了偶数个刚好相抵)所以我们在代码中只需找满足 ai^ k<ai的个数并统计即可;
代码如下:

#pragma warning(disable:4996);
#include <stdio.h>
#include <algorithm>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <queue>
#include<math.h>
using namespace std;
int a[105];
int main()
{int m;while (cin >> m && m){int sum = 0;for (int i = 0;i < m;i++){cin >> a[i];sum ^= a[i];}if (sum == 0) { puts("0");continue; }else {int cnt = 0;for (int i = 0;i < m;i++)if ((sum ^ a[i])< a[i]) cnt++;//位运算优先级小于关系运算,加括号!cout << cnt << endl;}}return 0;
}

HDU1850 Being a Good Boy in Spring Festivaly相关推荐

  1. HDU1850 Being a Good Boy in Spring Festival

    1 /* 2 HDU1850 Being a Good Boy in Spring Festival 3 http://acm.hdu.edu.cn/showproblem.php?pid=1850 ...

  2. HDU1850 Being a Good Boy in Spring Festival【Nim博弈】

    Being a Good Boy in Spring Festival Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 ...

  3. ICPC程序设计题解书籍系列之九:罗勇军《算法竞赛入门到进阶》

    罗书<算法竞赛入门到进阶>题目一览 第1章 算法竞赛概述 HDU1000 HDU1089-HDU1096 A+B for Input-Output Practice (I)-(VIII)( ...

  4. HDU各种考试题题解

    HDU各种考试题目一览 - Virtual Judge HDU研究生程序机考与考试 浙大计算机研究生复试上机考试-2005年 HDU1228 A + B[map] - 海岛Blog - CSDN博客 ...

  5. 博弈论大作战之 PART1

    HDU 1047: dp一下 #include<iostream> #include<cstdio> #include<cstring> #include<c ...

  6. 博弈论--从 必胜点与必败点 到 SG 函数

    一.必胜点与必败点 规则:当一方不能将游戏继续下去时,游戏结束,对方获胜. 必败点(P点) 前一个(previous player)选手将取胜的点称为必败点 必胜点(N点) 下一个(next play ...

  7. spring boot项目 中止运行 最常用的几种方法

    spring boot项目 中止运行 最常用的几种方法: 1. 调用接口,停止应用上下文 @RestController public class ShutdownController impleme ...

  8. html+spring boot简单的ajax数据传输实现

    本篇讲解在前后端不分离情况下的html+spring boot的项目数据传输实现 首先,后台我写了三个接口 package com.demo.ajax.controller;import com.de ...

  9. Spring Boot整合Spring Data JPA操作数据

    一. Sping Data JPA 简介 Spring Data JPA 是 Spring 基于 ORM 框架.JPA 规范的基础上封装的一套 JPA 应用框架,底层使用了 Hibernate 的 J ...

最新文章

  1. python26 调用mysql 5.1
  2. python3编程题_Python3简单面试编程题
  3. Hibernate持久化对象的状态:瞬时状态、持久化状态、托管状态
  4. 数据库DBA(3年以内需求)
  5. 第九篇:Spring Boot整合Spring Data JPA_入门试炼04
  6. 智能关机软件 c语言,智能关机软件
  7. [2018.08.02 T1] 第一题
  8. SVN如何回滚到指定版本
  9. 基于python的网络爬虫系统的设计与实现
  10. java调用js模板引擎_JavaScript模板引擎Template.js使用详解
  11. 几何校正(坐标变换+灰度重采样)
  12. AutoRunner检查点之校验属性
  13. 计算机word文档工作区名称,word文档界面名称 word文档的界面组成
  14. 《软件工程》实训报告
  15. SQL SERVER 2016安装Microsoft R Open和Microsoft R Server问题
  16. 全链路压测那点事(一)
  17. 22.11.30打卡 记忆化搜索2水题
  18. 模拟htonl、ntohl、htons、ntohs函数实现
  19. SQL Server部分知识的整理
  20. 移动端 UI设计尺寸(一)篇

热门文章

  1. 使用signal函数自定义信号处理方式
  2. C++ QT结合FFmpeg实战开发视频播放器-08播放器项目的整体UI架构
  3. RapidMiner 离散/缺失
  4. 蓝桥杯-- 打印 LOGO
  5. 数据分析-------动态报表制作
  6. 红帽子linux开发工具,红帽发布 Red Hat Enterprise Linux 5 下载
  7. CefSharp 常用设置
  8. Multisim14 ADC16的使用
  9. android 一分钟掌握圆形布局原理--圆形菜单控件 so easy
  10. win7无法安装到此计算机,win7系统安装出现“windows安装程序无法将windows配置为在此计算机的硬件上运行”的解决方法...