挺好的题

我们算出每个数的sg值后异或起来即可

对于$n$,我们要求$sg_n$

朴素的想法是枚举把$n$个石子分成$m$堆,有$m-n\%m$堆大小为$\left\lfloor\frac nm\right\rfloor$的石子,有$n\%m$堆大小为$\left\lfloor\frac nm\right\rfloor+1$的石子,因为是异或所以只有奇数堆的石子对$sg_n$有贡献,直接算出来再求mex即可

考虑优化,暴力是枚举$2\leq m\leq n$,因为当$\left\lfloor\frac nm\right\rfloor$相同时奇偶性相同的$m$算出来的答案是一样的,所以我们只需枚举所有使得$\left\lfloor\frac nm\right\rfloor$不同的$m$,用$m$和$m+1$更新答案即可

用记忆化搜索记录答案即可,时间复杂度可能是$O\left(a\sqrt a\right)$,其中$a$是数字的大小

#include<stdio.h>
#include<string.h>
int f[100010],v[1000010],M,F;
void get(int n){
	if(~f[n])return;
	if(n<F){
		f[n]=0;
		return;
	}
	int i,nex,s;
	for(i=2;i<=n;i=nex+1){
		nex=n/(n/i);
		if(f[n/i]==-1)get(n/i);
		if(n!=2&&f[n/i+1]==-1)get(n/i+1);
	}
	M++;
	for(i=2;i<=n;i=nex+1){
		nex=n/(n/i);
		s=0;
		if(n%i&1)s^=f[n/i+1];
		if((i-n%i)&1)s^=f[n/i];
		v[s]=M;
		if(i<nex){
			s=0;
			if(n%(i+1)&1)s^=f[n/i+1];
			if((i+1-n%(i+1))&1)s^=f[n/i];
			v[s]=M;
		}
	}
	for(i=0;v[i]==M;i++);
	f[n]=i;
}
int main(){
	int T,n,x,s;
	scanf("%d%d",&T,&F);
	memset(f,-1,sizeof(f));
	while(T--){
		scanf("%d",&n);
		s=0;
		while(n--){
			scanf("%d",&x);
			get(x);
			s^=f[x];
		}
		putchar(s?'1':'0');
		putchar(' ');
	}
}

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

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

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

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

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

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

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

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

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

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

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

  6. 【bzoj3576】 Hnoi2014—江南乐

    http://www.lydsy.com/JudgeOnline/problem.php?id=3576 (题目链接) 题意 给出一个数$F$,然后$n$堆石子,每次操作可以把一堆不少于$F$的石子分 ...

  7. bzoj3576: [Hnoi2014]江南乐

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

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

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

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

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

随机推荐

  1. Shuffle Cards(牛客第三场+splay)

    题目: 题意:将1~n的数进行m次操作,每次操作将第pi位到pi+si-1位的数字移到第一位,求最后的排列. 思路:现在还没不会写splay,在知道这是splay模板题后找了一波别人的模板,虽然过了, ...

  2. 448D - Codeforces

    D. Multiplication Table time limit per test 1 second memory limit per test 256 megabytes Bizon the C ...

  3. Linux-进程间通信(五): 网络套接字

    不想说话,坑太深:持续学习网络编程中...

  4. device tree --- #interrupt-cells property

    device tree source Example1 interrupt-controller@e000e100 { ... ... #interrupt-cells = <0x1>; ...

  5. PBFT算法的相关问题

    PBFT(99.02年发了两篇论文)-从开始的口头算法(指数级)到多项式级 要求 n>3f why: 个人简单理解:注意主节点是可以拜占庭的,从节点对于(n,v,m)的投票最开始也是基于主节点给 ...

  6. 初识ES6

    1.ECMAScript的官网地址:http://www.ecma-international.org/cma-262/6.0/,其是JS语言的下一代标准,已经在2015年6月正式发布,目标是让JS可 ...

  7. Python——拼接字符串

    Python中可以对字符串进行拼接: 1. 使用字符串拼接运算符: + >>> "Hello" + "World" 'HelloWorld' ...

  8. PHP常用函数总结(180多个)

    PHP常用函数总结 数学函数 1.abs(): 求绝对值 $abs = abs(-4.2); //4.2 数字绝对值数字 2.ceil(): 进一法取整 echo ceil(9.999); // 10 ...

  9. Leetcode 之Add Binary(29)

    比较简单,细节:先将字符串翻转,注意进位. string addBinary(string a, string b) { string result; int len = a.size() > ...

  10. java之基本数据类型与引用数据类型

    基本数据类型 需要注意的是字符是基本数据类型,但是字符串不是基本数据类型. 引用数据类型 类.接口类型.数组类型.枚举类型.注解类型. (上面说的字符串String属于引用数据类型中“类”的范畴) 两 ...