感觉其实很水?

题目就是一个Multi SG游戏,只需要预处理出所有的\(sg\)值即可\(O(Tn)\)计算

对于计算\(sg[n]\)而言,显然我们可以枚举划分了\(x\)堆来查看后继状态

那么,有\(n\;mod\;x\)个\(\left \lfloor \frac{n}{x} \right \rfloor + 1\)的堆以及\(x - n\;mod\;x\)个\(\left \lfloor \frac{n}{x} \right \rfloor\)的堆

暴力转移就是\(O(10^{10})\)的

显然上面可以数论分块,再讨论一下奇偶即可

复杂度\(O(10^5 \sqrt 10^5)\)


#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std; #define ri register int
#define rep(io, st, ed) for(ri io = st; io <= ed; io ++)
#define drep(io, ed, st) for(ri io = ed; io >= st; io --) const int sid = 2e5 + 5; int T, F, tim;
int sg[sid], mex[sid]; inline void init() {
rep(i, F, 100000) {
++ tim;
for(ri ii = 2, jj; ii <= i; ii = jj + 1) {
jj = i / (i / ii);
int p = i / ii, S = i - p * ii, S2 = ii - S, SG = 0;
if(S & 1) SG ^= sg[p + 1];
if(S2 & 1) SG ^= sg[p]; mex[SG] = tim;
if(ii + 1 > jj) continue;
S = i - p * (ii + 1); S2 = (ii + 1) - S; SG = 0;
if(S & 1) SG ^= sg[p + 1];
if(S2 & 1) SG ^= sg[p]; mex[SG] = tim;
}
rep(j, 0, 100000) if(mex[j] != tim)
{ sg[i] = j; break; }
}
} int main() {
cin >> T >> F;
init();
while(T --) {
int n, x, SG = 0;
cin >> n;
rep(i, 1, n) { cin >> x; SG ^= sg[x]; }
printf("%d ", SG ? 1 : 0);
}
return 0;
}

luoguP3235 [HNOI2014]江南乐 数论分块 + 博弈论的更多相关文章

  1. 【bzoj3576】[Hnoi2014]江南乐 数论分块+博弈论

    Description 小A是一个名副其实的狂热的回合制游戏玩家.在获得了许多回合制游戏的世界级奖项之后,小A有一天突然想起了他小时候在江南玩过的一个回合制游戏. 游戏的规则是这样的,首先给定一个数F ...

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

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

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

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

  4. luogu P3235 [HNOI2014]江南乐

    传送门 这题又是我什么时候做的(挠头) 首先是个和SG函数有关的博弈论,SG=0则先手必败.显然一堆石子就是一个游戏,而若干堆石子的SG值就是每堆SG的异或和,所以算出每堆石子SG就能知道答案 然后怎 ...

  5. [HNOI2014]江南乐

    Description 小A是一个名副其实的狂热的回合制游戏玩家.在获得了许多回合制游戏的世界级奖项之后,小A有一天突然想起了他小时候在江南玩过的一个回合制游戏.    游戏的规则是这样的,首先给定一 ...

  6. 【LG3235】 [HNOI2014]江南乐

    题目描述 给出\(n\)堆石子, 每次可以选择将大于某个数\(f\)一堆平均分成多个堆, 最后不能操作的失败. 题解 10pts 直接爆搜即可. 70pts 像我们对这类题目的常规操作那样,将一整个局 ...

  7. bzoj 3576: [Hnoi2014]江南乐

    Description 小A是一个名副其实的狂热的回合制游戏玩家.在获得了许多回合制游戏的世界级奖项之后,小A有一天突然想起了他小时候在江南玩过的一个回合制游戏. 游戏的规则是这样的,首先给定一个数F ...

  8. 【bzoj3576】[Hnoi2014]江南乐 博弈论+SG定理+数学

    题目描述 两人进行 $T$ 轮游戏,给定参数 $F$ ,每轮给出 $N$ 堆石子,先手和后手轮流选择石子数大于等于 $F$ 的一堆,将其分成任意(大于1)堆,使得这些堆中石子数最多的和最少的相差不超过 ...

  9. bzoj 3576: [Hnoi2014]江南乐【博弈论】

    这个东西卡常--预处理的时候要先把i%j,i/j都用变量表示,还要把%2变成&1-- 首先每一堆都是不相关子游戏,所以对于每一堆求sg即可 考虑暴力枚举石子数i,分割块数j,分解成子问题求xo ...

随机推荐

  1. JS设计模式——12.装饰者模式

    装饰者模式概述 本章讨论的是一种为对象添加特性的技术,她并不使用创建新子类这种手段. 装饰者模式可以用来透明的把对象包装在具有同样接口的另一个对象中.这样一来,就可以给一个方法添加一些行为,然后将方法 ...

  2. Go语言fmt库的print函数源码解析

    // Copyright 2009 The Go Authors. All rights reserved. // Use of this source code is governed by a B ...

  3. PE结构详解

    1 基本概念 下表描述了贯穿于本文中的一些概念: 名称 描述 地址 是“虚拟地址”而不是“物理地址”.为什么不是“物理地址”呢?因为数据在内存的位置经常在变,这样可以节省内存开支.避开错误的内存位置等 ...

  4. ip分片重组 ip_defrag

    在ip_local_deliver中,如果检测到是分片包,则需要进行分片重组: ip_local_deliver |-->ip_is_fragment //判断是否为分片包 |-->ip_ ...

  5. Linux多线程的使用一:互斥锁

    多线程经常会在Linux的开发中用到,我想把平时的使用和思考记录下来,一是给自己做个备忘,二是分享给可能会用到的人. POSIX标准下互斥锁是pthread_mutex_t,与之相关的函数有: 1 i ...

  6. 手动实现图片预览-放大缩小全屏支持IE9以上

    #{extends '/Index/index.html' /} #{set title:'意见反馈' /} <script src="/public/mgr/javascripts/ ...

  7. Splay算法摘要

    先介绍变量定义 int n; struct Node { //Splay节点定义 ],val,num,siz; //fa:它爸爸:son它儿子,左0右1:val:这个节点的值 //num:这个值的数量 ...

  8. IIS 启用https

    参考:http://www.cnblogs.com/dudu/p/iis_https_ca.html

  9. Linux基础 - crontab

    列出当前用户设置的定时任务 crontab -l 编辑定时任务 crontab -e 用法 m h dom mon dow * * * * * command 字段详解: *:any m: minut ...

  10. [USACO18FEB]Snow Boots S

    提供一种无脑DP做法 题目中大概有这么些东西:位置,穿鞋,跑路 数据小,那么暴力开数组暴力DP吧 设dp[i][j]表示穿着鞋子j,到达位置i是否可行 无脑转移 枚举位置,正在穿哪双鞋,换成哪双走出去 ...