题目链接

题目

题目描述

有一种有趣的游戏,玩法如下:

玩家:2人;

道具:N堆石子,每堆石子的数量分别为 \(X_1,X_2,...,X_n\) ​;

规则:

  1. ​ 游戏双方轮流取石子;
  2. ​ 每人每次选一堆石子,并从中取走若干颗石子(至少取1颗);
  3. ​ 所有石子被取完,则游戏结束;
  4. ​ 如果轮到某人取时已没有石子可取,那此人算负。

假如两个游戏玩家都非常聪明,问谁胜谁负?

输入描述

第一行,一个整数N;

第二行,N个空格间隔的整数 \(X_i\) ,表示每一堆石子的颗数。

输出描述

输出仅一行,一个整数,若先手获胜输出win,后手获胜输出lose。

示例1

输入

4
7 12 9 15

输出

win

备注

对于全部数据,\(N \leq 5 \times10^4,1 \leq X_i \leq 10^5\) 。

题解

知识点:博弈论。

经典的Nim游戏,当所有石子数的异或和为 \(0\) 先手必败,否则必胜。

我们设 \(\displaystyle \bigoplus_{i=1}^n a_i = 0\) 时为必败态,否则为必胜态(这里只是假设,字面上的意义还需要证明),考虑证明:

  1. 游戏终止状态为必败态:

    终止状态为全 \(0\) ,满足我们的假设。

  2. 必败态只能转到必胜态:

    假设存在合法操作使得必败态转到必败态,那么存在一个石子堆被改变了,不妨设它新的数量为 \(a_i'\) ,设其他没有改变的石子堆的异或和为 \(sum\) ,我们可以得到 \(sum \oplus a_i' = sum \oplus a_i = 0\) ,最后 \(a_i' = a_i\) 矛盾。

    因此必败态只能转到必胜态。

  3. 必胜态可以转到必败态:

    我们设当前异或和为 \(sum\) ,设 \(sum\) 二进制最高位为第 \(k\) 位,那么一定存在一个石子堆的数量二进制第 \(k\) 位为 \(1\) ,不妨假设这堆石子为 \(a_i\) 。此时,我们有 \(a_i \oplus sum < a_i\) ,因为 \(sum\) 不会改变 \(a_i\) 更高位的状态,但会使得 \(a_i\) 的第 \(k\) 位变为 \(0\) 。那么,我们可以从 \(a_i\) 中拿出 \(a_i - (a_i \oplus sum)\) 个石子,此时 \(a_i \to a_i \oplus sum\) ,于是异或和就变为 \(sum \oplus sum = 0\) 。

    因此必胜态可以转到必败态。

综上,我们证明了我们假设的必胜态和必败态确实是实际意义上的必胜和必败,并且这是一个构造性证明。

时间复杂度 \(O(n)\)

空间复杂度 \(O(n)\)

代码

#include <bits/stdc++.h>
using namespace std;
using ll = long long; int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int n;
cin >> n;
int sum = 0;
for (int i = 1;i <= n;i++) {
int x;
cin >> x;
sum ^= x;
}
cout << (sum ? "win" : "lose") << '\n';
return 0;
}

NC50615 取石子游戏 2的更多相关文章

  1. Games:取石子游戏(POJ 1067)

    取石子游戏 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 37662   Accepted: 12594 Descripti ...

  2. HDU 2516 取石子游戏(斐波那契博弈)

    取石子游戏 Time Limit: 2000/1000 MS(Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissi ...

  3. hdu 1527 取石子游戏(Wythoff Game)

    题意:Wythoff Game 思路:Wythoff Game #include<iostream> #include<stdio.h> #include<math.h& ...

  4. HDU 2516 取石子游戏(FIB博弈)

    取石子游戏 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  5. 1874: [BeiJing2009 WinterCamp]取石子游戏 - BZOJ

    Description小H和小Z正在玩一个取石子游戏. 取石子游戏的规则是这样的,每个人每次可以从一堆石子中取出若干个石子,每次取石子的个数有限制,谁不能取石子时就会输掉游戏. 小H先进行操作,他想问 ...

  6. HDU-1527 取石子游戏

    http://acm.hdu.edu.cn/showproblem.php?pid=1527 交换  :可实现. if( n < m ) { n^=m; m^=n; n^=m; } (三)尼姆博 ...

  7. bzoj 1874 取石子游戏 题解 &amp; SG函数初探

    [原题] 1874: [BeiJing2009 WinterCamp]取石子游戏 Time Limit: 5 Sec  Memory Limit: 162 MB Submit: 334  Solved ...

  8. HDU 2516 取石子游戏 (博弈论)

    取石子游戏 Problem Description 1堆石子有n个,两人轮流取.先取者第1次能够取随意多个,但不能所有取完.以后每次取的石子数不能超过上次取子数的2倍.取完者胜.先取者负输出" ...

  9. 【POJ】1067 取石子游戏(博弈论)

    Description 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后 ...

  10. vijos 1557:bzoj:1413: [ZJOI2009]取石子游戏

    Description 在研究过Nim游戏及各种变种之后,Orez又发现了一种全新的取石子游戏,这个游戏是这样的: 有n堆石子,将这n堆石子摆成一排.游戏由两个人进行,两人轮流操作,每次操作者都可以从 ...

随机推荐

  1. 简单剖析Hashmap

    剖析 Java Hashmap 源码 在 Java 的集合框架中,HashMap 是一颗璀璨的明珠.通过深入挖掘其源码,我们将揭开 HashMap 的神秘面纱,理解其底层原理.扩容机制和数据结构. 1 ...

  2. 【ThreadX-USBX】Azure RTOS USBX概述

    Azure RTOS USBX是高性能USB主机,设备和移动(OTG)嵌入式堆栈.Azure RTOS USBX与Azure RTOS ThreadX完全集成,并且可用于所有ThreadX支持的处理器 ...

  3. linux环境C语言实现:h265与pcm封装成AVI格式

    ​ 前言 不知道是处于版权收费问题还是什么原因,H265现在也并没有非常广泛的被普及.将h265数据合成AVI的资料现在在网上也基本上没有.使用格式化工厂工具将h265数据封装成AVI格式,发现它在封 ...

  4. [转帖]JVM 输出 GC 日志导致 JVM 卡住,我 TM 人傻了

    https://www.jianshu.com/p/51380e04eab1 最近,我们升级了 Java 17.后来,我们的 k8s 运维团队为了优化我们的应用日志采集, 将我们所有 pod (你可以 ...

  5. [转帖]MinIO Client(mc)完全指南

    https://www.cnblogs.com/lvzhenjiang/p/14944821.html 目录 一.获取MinIO Client(mc) 1.1 docker版 1.2 Homebrew ...

  6. [转帖]Elasticsearch8关闭安全认证功能

    https://juejin.cn/post/7203637198120878137 Elasticsearch8在默认情况下是开启安全认证的.但在开发或者简单尝试时,希望关闭它. 关闭安全认证的方式 ...

  7. [转帖]探索惊群 ③ - nginx 惊群现象

    https://wenfh2020.com/2021/09/29/nginx-thundering-herd/    nginx  kernel 本文将通过测试,重现 nginx(1.20.1) 的惊 ...

  8. 【转帖】Java Full GC (Ergonomics) 的排查

    文章目录 1. Full GC (Ergonomics) 1.1 Java 进程一直进行 Full GC 1.2 Full GC 的原因 1.3 检查堆占用 2. 代码检查 3. 解决方式 1. Fu ...

  9. [转帖]QPS 最高提升 91% | 腾讯云 TKE 基于 Cilium eBPF 提升 k8s Service 性能

    https://my.oschina.net/cncf/blog/5121393   朱瑜坚,腾讯云后台工程师,主要负责腾讯云 TKE 容器网络的构建和相关网络组件的设计.开发和维护工作.张浩,腾讯云 ...

  10. docker hub arm64v8/postgres

    arm64v8/postgres https://hub.docker.com/r/arm64v8/postgres By arm64v8 • Updated 4 days ago The Postg ...