Description

题库链接

给你指定一个数 \(f\) ,并给你 \(T\) 组游戏,每组有 \(n\) 堆石子, \(A,B\) 两人轮流对石子进行操作,每次你可以选择其中任意一堆数量不小于 \(f\) 的石子,平均分为 \(m\) 份(即保证最大的一堆和最小的一堆中石子数量之差不超过 \(1\) )。不能操作者负。

问先手是否有必胜策略。

\(T<100,N<100,F<100000,每堆石子数量<100000\)

Solution

首先对于组合游戏,该游戏的 \(sg\) 函数是各个组分 \(sg\) 函数的 \(nim\) 和。

其次 \(sg(x)=mex\{sg(y)|y是x的后继状态\}\) 。由这两个性质我们可以来求初始状态为 \(n\) 态还是 \(p\) 态。

设法来求 \(sg(x)\) 。

我们可以枚举分的堆数 \(i\) 。

为了使数量尽量平均,我们应该使分出来每堆的石子数量尽可能等于 \(\lfloor\frac{x}{i}\rfloor\) ,如果每一堆分到\(\lfloor\frac{x}{i}\rfloor\) 个石子,那么最后会多出 \(x\mod i\) 个石子。

考虑把这些多出来的石子分别放在分出来的石子堆中,那么有 \(x\mod i\) 堆会分到新的石子。

经过简单的计算,我们可以发现最后有 \(x\mod i\) 堆分到了 \(\lfloor\frac{x}{i}\rfloor+1\) 个石子,有 $ i-(x\mod i)$ 堆分到了 \(\lfloor\frac{x}{i}\rfloor\) 。

由数论分块的思想,对于相同的块内,后继状态 \(y\) 最多只有两种,由于相同的数异或可以抵消,我们可以通过判断 \(x\mod i\) 和 \(i-(x\mod i)\) 的奇偶性来缩小运算规模。

Code

//It is made by Awson on 2018.3.7
#include <bits/stdc++.h>
using namespace std;
const int N = 100000; int sg[N+5], mex[N+5], t, F, n, x; int f(int x) {
if (sg[x] != -1) return sg[x];
if (x < F) return sg[x] = 0;
sg[x] = 0;
for (int i = 2; i <= x; i = x/(x/i)+1) {
int tmp = 0;
if ((i-x%i)&1) tmp ^= f(x/i); if ((x%i)&1) tmp ^= f(x/i+1);
mex[tmp] = x;
if (i < x && (x/i == x/(i+1))) {
++i, tmp = 0;
if ((i-x%i)&1) tmp ^= f(x/i); if ((x%i)&1) tmp ^= f(x/i+1);
mex[tmp] = x;
}
}
while (mex[sg[x]] == x) ++sg[x];
return sg[x];
}
void work() {
memset(sg, -1, sizeof(sg));
scanf("%d%d", &t, &F); --t;
while (t--) {
scanf("%d", &n); int ans = 0; while (n--) scanf("%d", &x), ans ^= f(x); printf("%d ", (ans != 0));
}
scanf("%d", &n); int ans = 0; while (n--) scanf("%d", &x), ans ^= f(x); printf("%d\n", (ans != 0));
}
int main() {
work(); return 0;
}

[HNOI 2014]江南乐的更多相关文章

  1. BZOJ-3576 江南乐 博弈+优化

    fye测试原题,高一全跪,高二学长除了CA爷似乎都A辣(逃) 3576: [Hnoi2014]江南乐 Time Limit: 30 Sec Memory Limit: 512 MB Submit: 1 ...

  2. bzoj 3576[Hnoi2014]江南乐 sg函数+分块预处理

    3576: [Hnoi2014]江南乐 Time Limit: 30 Sec  Memory Limit: 512 MBSubmit: 1929  Solved: 686[Submit][Status ...

  3. 【BZOJ3576】江南乐(博弈论)

    [BZOJ3576]江南乐(博弈论) 题面 BZOJ 洛谷 题解 无论一堆石头怎么拆分,都并不能改变它是一个\(Multi-SG\)的事实. 既然每一组的\(F\)都是固定的,那么我们预处理所有的可能 ...

  4. 洛谷 P3235 [HNOI2014]江南乐 解题报告

    P3235 [HNOI2014]江南乐 Description 两人进行 T 轮游戏,给定参数 F ,每轮给出 N 堆石子,先手和后手轮流选择石子数大于等于 F 的一堆,将其分成任意(大于1)堆,使得 ...

  5. HNOI 2014

    D1T1:画框 frame 题意:给你两个n阶正整数方阵,请你求最大的\( \sum_{i = 1}^{n} A_{i, p_i}\times \sum_{i = 1}^{n} B_{i, p_i}  ...

  6. 【LOJ】#2210. 「HNOI2014」江南乐

    LOJ#2210. 「HNOI2014」江南乐 感觉是要推sg函数 发现\(\lfloor \frac{N}{i}\rfloor\)只有\(O(\sqrt{N})\)种取值 考虑把这些取值都拿出来,能 ...

  7. HNOI 2014 米特运输(图论)

    HNOI 2014 米特运输 题目大意 给一棵树,每个点有自己的权值,要求更改一些点的权值,使得整棵树满足两个条件: 同一个父亲的所有子节点权值相同 父节点的取值为所有子节点的和 答案输出最少要更改的 ...

  8. 「HNOI 2014」 江南乐

    \(Description\) \(n\)堆石子,每堆石子有\(s_i\)个,两个人轮流操作,每次可以将一对不少于\(F\)的石子尽量平均分成\(m\)堆,\(m\)每次自选,不能操作者输.共有\(T ...

  9. 图论(KM算法,脑洞题):HNOI 2014 画框(frame)

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABPoAAANFCAIAAABtIwXVAAAgAElEQVR4nOydeVxTV/r/n9ertaJEC4

随机推荐

  1. ORACLE 11G R2 RAC classical install OGG12.1(LINUX) 经典抽取模式单项同步配置OGG12.1

    博文结构图如下: 一.环境描述以及注意事项 1.1 环境简介 IP 系统 Oracle版本 OGG版本 源端 172.16.10.16/36 RHEL6.5 oracle11204 12.1 目标端 ...

  2. Leetcode 28——Implement strStr()

    Implement strStr(). Return the index of the first occurrence of needle in haystack, or -1 if needle ...

  3. 团队开发---”我爱淘“校园二手书店 NABC分析

    本项目特点之一:可预订 N:对于一些抢手的书可以提前预定,避免学生买不到书 A:网上下单,通过手机便捷购物 B:使得订书更加方便快捷 C:二手书摊.网上书店 团队成员:杨广鑫.郭健豪.李明.郑涛

  4. NetFPGA-1G-CML Demo --- openflow_switch

    环境 ubuntu 14.04 vivado 15.2 ise 14.6 更多基础配置:http://www.cnblogs.com/wpqwpq/p/6771568.html 运行步骤 step1: ...

  5. 【转】支持向量机(SVM)

    什么是支持向量机(SVM)? SVM 是一种有监督的机器学习算法,可用于分类或回归问题.它使用一种称为核函数(kernel)的技术来变换数据,然后基于这种变换,算法找到预测可能的两种分类之间的最佳边界 ...

  6. Mego开发文档 - 事务

    事务 事务允许以原子方式处理多个数据库操作.如果事务已提交,则所有操作都已成功应用于数据库.如果事务回滚,则没有任何操作应用于数据库. 默认行为 默认情况下,如果数据库提供程序支持事务,则单次的提交操 ...

  7. emqtt 试用(六)系统主题

    $SYS-系统主题 EMQ 消息服务器周期性发布自身运行状态.MQTT 协议统计.客户端上下线状态到 $SYS/ 开头系统主题. $SYS 主题路径以 "$SYS/brokers/{node ...

  8. SpringCloud用户自定义配置信息的定义和查看

    一.概念 在SpringCloud项目中,用户自己定义的配置信息也可以放在application.*,需要以 info打头,以便使用公用基础设施 /info 查看! 本文讲解基于 ConfigServ ...

  9. Linux下的Shell编程(2)环境变量和局部变量

    Shell Script是一种弱类型语言,使用变量的时候无需首先声明其类型. 局部变量在本地数据区分配内存进行存储,这个变量归当前的Shell所有,任何子进 程都不能访问本地变量.这些变量与环境变量不 ...

  10. WPF项目学习.四

    信息收录项目 版权声明:本文为博主初学经验,未经博主允许不得转载. 一.前言 记录在学习与制作WPF过程中遇到的解决方案.  需求文案.设计思路.简要数据库结构.简要流程图和明细代码,动图细化每步操作 ...