先对$n$分奇偶两种情况考虑——

$n$为奇数,显然先手希望最终产生的$x_{1}\oplus x_{2}\oplus...\oplus x_{n}=0$

对于后手,考虑构造:将最大的未被选择的$a_{k}$放在最大的$x_{t}$上,很明显除去先手的第一个以外,后手的每一次都比先手的下一次放的数大

设$a_{k}$为先手第一个取的位置,即必然有$x_{t}-a_{k}\ge \sum_{i=1}^{n}a_{i}-a_{k}-x_{t}$,即$x_{t}>\sum_{i=1}^{n}a_{i}-x_{t}$

而$x_{1}\oplus x_{2}\oplus...\oplus x_{n}=0$当且仅当$x_{t}=x_{1}\oplus x_{2}\oplus...x_{t-1}\oplus x_{t+1}...\oplus x_{n}\le \sum_{i=1}^{n}a_{i}-x_{t}<x_{t}$,因此后手必胜

$n$为偶数,显然先手希望最终产生的$x_{1}\oplus x_{2}\oplus...\oplus x_{n}>0$

对于先手,类似上述后手的构造,那么有$x_{t}\ge \sum_{i=1}^{n}a_{i}-x_{t}$

最终异或能为0的必要条件是$x_{t}=\sum_{i=1}^{n}a_{i}-x_{t}$,同时在这样的情况下,必然是$a_{i}$成对出现,后手可以模仿先手的操作使得异或为0,因此此时后手必胜

 1 #include<bits/stdc++.h>
2 using namespace std;
3 map<int,int>mat;
4 int t,n,a[100005];
5 int main(){
6 scanf("%d",&t);
7 while (t--){
8 scanf("%d",&n);
9 for(int i=1;i<=n;i++)scanf("%d",&a[i]);
10 if (n&1)printf("Second\n");
11 else{
12 mat.clear();
13 int flag=0;
14 for(int i=1;i<=n;i++){
15 mat[a[i]]^=1;
16 flag+=2*mat[a[i]]-1;
17 }
18 if (flag)printf("First\n");
19 else printf("Second\n");
20 }
21 }
22 }

[atARC105D]Let's Play Nim的更多相关文章

  1. [LeetCode] Nim Game 尼姆游戏

    You are playing the following Nim Game with your friend: There is a heap of stones on the table, eac ...

  2. CodeForces - 662A Gambling Nim

    http://codeforces.com/problemset/problem/662/A 题目大意: 给定n(n <= 500000)张卡片,每张卡片的两个面都写有数字,每个面都有0.5的概 ...

  3. HDU 5795 A Simple Nim 打表求SG函数的规律

    A Simple Nim Problem Description   Two players take turns picking candies from n heaps,the player wh ...

  4. LeetCode 292. Nim Game

    Problem: You are playing the following Nim Game with your friend: There to stones. The one who remov ...

  5. 【SRM】518 Nim

    题意 \(K(1 \le K \le 10^9)\)堆石子,每堆石子个数不超过\(L(2 \le 50000)\),问Nim游戏中先手必败局面的数量,答案对\(10^9+7\)取模. 分析 容易得到\ ...

  6. HDU 2509 Nim博弈变形

    1.HDU 2509  2.题意:n堆苹果,两个人轮流,每次从一堆中取连续的多个,至少取一个,最后取光者败. 3.总结:Nim博弈的变形,还是不知道怎么分析,,,,看了大牛的博客. 传送门 首先给出结 ...

  7. HDU 1907 Nim博弈变形

    1.HDU 1907 2.题意:n堆糖,两人轮流,每次从任意一堆中至少取一个,最后取光者输. 3.总结:有点变形的Nim,还是不太明白,盗用一下学长的分析吧 传送门 分析:经典的Nim博弈的一点变形. ...

  8. Nim游戏

    目前有3堆石子,每堆石子个数也是任意的,双方轮流从中取出石子,规则如下:1)每一步应取走至少一枚石子:每一步只能从某一堆中取走部分或全部石子:2)如果谁不能取谁就失败. Bouton定理: 必败状态当 ...

  9. HDU 3032 Nim or not Nim (sg函数)

    加强版的NIM游戏,多了一个操作,可以将一堆石子分成两堆非空的. 数据范围太大,打出sg表后找规律. # include <cstdio> # include <cstring> ...

随机推荐

  1. 微信公众号开发之H5页面跳转到指定的小程序

    前言: 最近公司有一个这样的需要,需要从我们在现有的公众号H5页面中加一个跳转到第三方小程序的按钮.之前只知道小程序之间是可以相互跳转的,今天查阅了下微信开发文档原来现在H5网页也支持小程序之间的跳转 ...

  2. Geocoding Tools(地理编码工具)

    地理编码工具 # Process: 创建地址定位器 arcpy.CreateAddressLocator_geocoding("", "", "&qu ...

  3. .Net微信服务商平台ApiV3接口

    最近做个对接微信服务商平台的小程序项目,大概要实现的流程是:a)特约商户进件 > b)生成带参数的小程序码 > c)小程序支付 > d)分账,记录一下,希望能对需要的朋友有所帮助 开 ...

  4. python的函数参数传递方式

    python的一切数据类型都是对象.但是python的对象分为不可变对象和可变对象.python的变量是引用,对python变量的赋值是引用去绑定该对象. 可变对象的数据发生改变,例如列表和字典,引用 ...

  5. C语言知识_1

    +,-,*,/是C语言中表示四则运算的符号.:用来分割不同的语句{}用来对语句进行分组 函数代表了一组数据处理过程,由一对大括号所包含的多条语句来表示这个处理过程.每个函数有唯一的名字,main函数是 ...

  6. 盘点一下Redis中常用的Java客户端,或者咱们手写一个?

    Java中那些Redis的客户端 前面我们的所有操作都是基于redis-cli来完成的,那么我们要在Java中操作Redis,怎么做呢?首先我们先来了解一下Redis Serialization Pr ...

  7. CentOS 压缩解压

    目录 命令 tar gzip.gunzip bzip2.bunzip2 zip.unzip 命令组合 打包:将多个文件合成一个总的文件,这个总的文件通常称为"归档". 压缩:将一个 ...

  8. Java:并发笔记-07

    Java:并发笔记-07 说明:这是看了 bilibili 上 黑马程序员 的课程 java并发编程 后做的笔记 6. 共享模型之不可变 本章内容 不可变类的使用 不可变类设计 无状态类设计 6.1 ...

  9. hdu 1198 Farm Irrigation(并查集)

    题意: Benny has a spacious farm land to irrigate. The farm land is a rectangle, and is divided into a ...

  10. python教程-(三)使用字符串

    一.设置字符串的格式:精简版 方法1 >>> format = "Hello %s, welcome to %s" >>> values = ( ...