首页 > 其他分享 >[ARC168B] Arbitrary Nim

[ARC168B] Arbitrary Nim

时间:2023-12-19 11:55:05浏览次数:35  
标签:le Nim int ARC168B 异或 Arbitrary oplus

原题链接:ARC168B

题意:有 \(n\) 堆石子,每堆有 \(a_{i}\) 个。每人每次可以取走其中一堆中的 \(x(1 \le x \le k)\) 个。求出一个最大的 \(k\) 使得先手必胜。无解输出 \(0\),\(k\) 可以取无限大输出 \(-1\)。

一个经典 Nim 游戏的结论是:\(a_{i}\) 的异或和为 \(0\),则先手必败。但是现在限制了一次最多取 \(k\) 个,所以我们可以先把每一个 \(a_{i}\) 模上 \(k+1\),然后这就变成了一个经典博弈。

首先考虑如何判断 \(-1\) 的情况。显然,如果当前异或和已经不为 \(0\) 了,那么无论 \(k\) 取多大,异或值一定不为 \(0\),所以 \(k\) 可以取无限大。

再来考虑 \(0\) 的情况。我们会发现,两个相同的 \(a_{i}\) 无论模上多少最终的值都一定相同,即最终的异或和一定为 \(0\),所以我们可以先消除掉出现次数为偶数的数(因为异或和为 \(0\) 的数对最终的异或值没有影响),如果这时已经没有数了,说明最终的异或和一定为 \(0\),则先手必败。

现在就只剩下一些出现次数为奇数的数了,且这些数的异或和为 \(0\)(否则为上述 \(-1\) 的情况)。假设其中的最大值为 \(p\),其余值的异或和等于 \(q\),那么 \(p \oplus q = 0\)。这时将 \(k\) 设为 \(p-1\),将所有数模上 \(p\) 之后,只有 \(p\) 变为了 \(0\),其余数不变。因为 \(p \oplus q = 0\),所以 \(0 \oplus q \ne 0\),所以这时先手必胜,\(k\) 取 \(p-1\)。

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int MAXN = 3e5 + 10;
int n,a[MAXN],k = 0;
set <int> s;
signed main()
{
	cin >> n;
	for(int i = 1;i <= n;i++)
	{
		cin >> a[i];
		if(s.find(a[i]) != s.end()) s.erase(a[i]);
		else s.insert(a[i]);
		k ^= a[i];
	}
	if(k != 0) cout << "-1";
	else if(s.size() == 0) cout << "0";
	else cout << *--s.end() - 1;
	return 0;
} 

标签:le,Nim,int,ARC168B,异或,Arbitrary,oplus
From: https://www.cnblogs.com/Creeperl/p/17913387.html

相关文章

  • InternImage: Exploring Large-Scale Vision Foundation Models with Deformable Conv
    InternImage:ExploringLarge-ScaleVisionFoundationModelswithDeformableConvolutions*Authors:[[WenhaiWang]],[[JifengDai]],[[ZheChen]],[[ZhenhangHuang]],[[ZhiqiLi]],[[XizhouZhu]],[[XiaoweiHu]],[[TongLu]],[[LeweiLu]],[[HongshengLi]......
  • 题解 LGP7294【[USACO21JAN] Minimum Cost Paths P】/ accoders::NOI 5696【棋子】
    problemFarmerJohn的牧草地可以看作是一个\(N×M\)(\(2≤N≤10^9,2≤M≤2⋅10^5\))的正方形方格组成的二维方阵(想象一个巨大的棋盘)。对于\(x∈[1,N],y∈[1,M]\),从上往下第\(x\)行、从左往右第\(y\)列的方格记为\((x,y)\)。此外,对于每一个\(y∈[1,M]\),第\(y\)列拥有一个......
  • 浅谈Nim游戏
    浅谈Nim游戏首先,我们需要了解\(Nim\)游戏是什么东西。\(Nim\)游戏指:两个人,有\(n\)堆数,每堆有\(a_i\)个,每次可以且仅可以取一堆中的若干个数,求问先手有没有必胜策略(当然两个人都足够聪明)。首先,先研究显然的必胜策略。比如,我们要得到\(0\)这个数,那么当你取完时还......
  • MagicAnimate模型:颠覆传统,AI让照片舞动起来
    前言近日,新加坡国立大学与字节跳动合作开发的MagicAnimate引发了科技界的广泛关注。这一人像动画技术,能够将静态图片转化为动态视频,为AI动画领域带来了革命性的突破。huggingface模型下载:https://huggingface.co/zcxu-eric/MagicAnimateAI快站模型免费加速下载:https://aifasthub......
  • Golang标准库:非类型安全操作(Arbitrary 类型 Pointer 类型 Sizeof 函数 Offsetof 函数)
    unsafe库徘徊在“类型安全”边缘,由于它们绕过了Golang的内存安全原则,一般被认为使用该库是不安全的。但是,在许多情况下,unsafe库的作用又是不可替代的,灵活地使用它们可以实现对内存的直接读写操作。在reflect库、syscall库以及其他许多需要操作内存的开源项目中都有对它的引用。un......
  • Nim 枚举类型 对性能的影响
    Nim枚举类型对性能的影响继上一篇文章《Nim概念Concept对性能的影响》后,我在想,既然method虚方法造成性能的影响很大,那么有没有更快的方法实现,当然是有的,那就是枚举类型。EnumType与很多的新设计的一样,Nim语言也内置了枚举类型,比如下面的代码:typeValueGetterKind......
  • Nim 概念 Concept 对性能的影响
    Nim概念Concept对性能的影响继上一篇文章《C#泛型编译特性对性能的影响》后,我又研究了Nim语言相关的设计,由于Nim语言与C#语言有些差异,比如Nim没有接口,也没有直接的class关键字,所以某些实现是变通的办法。概念Concept在Nim中没有Interface的概念,虽然有多次提案,......
  • [LeetCode] 1266. Minimum Time Visiting All Points
    Ona2Dplane,therearenpointswithintegercoordinatespoints[i]=[xi,yi].Returntheminimumtimeinsecondstovisitallthepointsintheordergivenbypoints.Youcanmoveaccordingtotheserules:In1second,youcaneither:moveverticallyb......
  • [Codeforces] CF1591C Minimize Distance
    CF1591CMinimizeDistance题目一条线上有\(n\)(\(1\len\le2\cdot10^5\))个仓库,第\(i\)个仓库的位置是\(x_i\)(\(1\lei\len\))。你有\(n\)箱货物,要分别运到这\(n\)个仓库里。你的初始位置在点\(0\),一次可以携带\(k\)(\(1\lek\len\))箱货物。在送完携带......
  • Manim 绘制图形
    #coding:utf-8#pipinstallmanim#ffmpeg官网http://ffmpeg.org/frommanimimport*classDraw(Scene):defconstruct(self):text1=Text('HelloWorld',t2c={'[:1]':'#3174f0','[1:2]�......