正题

题目链接:https://www.luogu.com.cn/problem/P3235


题目大意

TTT组游戏,固定给出FFF。每组游戏有nnn个石头,每次操作的人可以选择一个数量不少于FFF的石堆并把它尽量均摊成MMM堆(M>1)(M>1)(M>1)。无法操作的人输,求每组游戏是否先手必胜。


解题思路

每个石头之间互不影响,所以求出它们的SGSGSG函数然后异或起来就好了。

设sgisg_isgi​表示iii个石头的SGSGSG函数,然后暴力的想法是枚举MMM然后求答案,但是这样显然过不了。

发现对于一个MMM和石头数量nnn,能产生n%Mn\%Mn%M个大小⌊nM⌋+1\lfloor\frac{n}{M}\rfloor+1⌊Mn​⌋+1的石头堆和M−n%MM-n\% MM−n%M个大小⌊nM⌋\lfloor\frac{n}{M}\rfloor⌊Mn​⌋的石头堆。

额,好像就可以整除分块了。每次整除分块出来的一个区间[l,r][l,r][l,r],如果l=rl=rl=r直接计算。

如果l≠rl\neq rl​=r的情况好像比较麻烦,其实只需要考虑lll和l+1l+1l+1就好了,因为如果再往后的奇偶性就会重复。

时间复杂度O(nn)O(n\sqrt n)O(nn​)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e5+10;
int T,F,cnt,cl[N],sg[N];
bool v[N];
void add(int x)
{if(!v[x])cl[++cnt]=x;v[x]=1;return;}
void clear(){while(cnt)v[cl[cnt]]=0,cnt--;return;
}
int main()
{scanf("%d%d",&T,&F);for(int i=F;i<N;i++){for(int l=2,r;l<=i;l=r+1){r=i/(i/l);int k=i%l,p=i/l,q=p+1;if((k&1)&&((l-k)&1))add(sg[p]^sg[q]);else if((k&1)&&!((l-k)&1))add(sg[q]);else if(!(k&1)&&((l-k)&1))add(sg[p]);else add(0);if(l!=r){l++;k=i%l;if((k&1)&&((l-k)&1))add(sg[p]^sg[q]);else if((k&1)&&!((l-k)&1))add(sg[q]);else if(!(k&1)&&((l-k)&1))add(sg[p]);else add(0);}}while(v[sg[i]])sg[i]++;clear();}while(T--){int n,ans=0;scanf("%d",&n);while(n--){int x;scanf("%d",&x);ans^=sg[x];}if(ans)printf("1 ");else printf("0 ");}return 0;
}

P3235-[HNOI2014]江南乐【整除分块,SG函数】相关推荐

  1. Bzoj3576 [Hnoi2014]江南乐

    Time Limit: 30 Sec  Memory Limit: 512 MB Submit: 1555  Solved: 552 Description 小A是一个名副其实的狂热的回合制游戏玩家. ...

  2. 【bzoj3576】 Hnoi2014—江南乐

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

  3. 欧拉函数+狄利克雷卷积+莫比乌斯函数+莫比乌斯反演+整除分块+杜教筛

    Powered by:NEFU AB-IN 文章目录 欧拉函数 狄利克雷卷积 莫比乌斯函数 莫比乌斯反演 P3455 [POI2007]ZAP-Queries 整除分块 P2522 [HAOI2011 ...

  4. 专题·莫比乌斯函数与欧拉函数【including 整除分块,积性函数,狄利克雷卷积,欧拉函数,莫比乌斯函数,莫比乌斯反演

    初见安~又是好久没写博客了--加上CSP才炸了一波. 目录 一.整除分块 题解 二.积性函数 三.狄利克雷卷积 四.欧拉函数 五.莫比乌斯函数(mu) 六.莫比乌斯反演 一.整除分块 看个例题:洛谷P ...

  5. 2021-06-27 记录最近刷过的数论题(整除分块,MillerRabin素性检测,积性函数,重数)

    记录一下最近刷过的数论题 文章目录 LOJ 143. 质数判定 AcWing 197. 阶乘分解 AcWing 199. 余数求和 LOJ #124. 除数函数求和 1 LOJ #125. 除数函数求 ...

  6. 杜教筛(上):整除分块,积性函数,欧拉与莫比乌斯

    整除分块: 当我们求∑i=1nf(⌊ni⌋)\sum_{i=1}^nf(\lfloor\frac{n}{i}\rfloor)∑i=1n​f(⌊in​⌋)的时候,如果1到n求一遍感觉太傻了,因为会有很多 ...

  7. 【NOI2016】循环之美【莫比乌斯反演】【整除分块】【杜教筛】【类杜教筛】

    传送门 题意:给定n,m,kn,m,kn,m,k,求1≤x≤n,1≤y≤m1\leq x\leq n,1\leq y\leq m1≤x≤n,1≤y≤m时xyx \over yyx​中数值不同的纯循环小 ...

  8. luogu P3455 [POI2007]ZAP-Queries (莫比乌斯反演 + 整除分块)

    整理的算法模板合集: ACM模板 题目传送门 本题中数据为5e4,我们只需要筛一次5e4就行了. 双倍经验的P4450 双亲数中数据达到了1e6,我们直接筛1e6的莫比乌斯函数有点不可取,因为只有一组 ...

  9. 【BZOJ3576】江南乐,博弈

    传送门 思路: 很厉害的一道博弈 虽说是暴力求SG函数,但是要加入分块优化 如果说直接按照规则求的话是O(n2)O(n^2)的 (这也是我会的--) 但是注意到⌊ni⌋⌊\frac n i⌋这个神奇的 ...

最新文章

  1. 机器学习 KNN算法实践
  2. 挑战NLP、量子计算难题,300多支本科生队伍同场角逐,2020 ASC超算竞赛一触即发...
  3. 深度理解目标检测(MMdetection)-HOOK机制
  4. 转--SDP 协议分析
  5. 每日一皮:完美解释 UDP 为什么会丢包...
  6. 小学生学python到底能干什么-小学生都学Python了,你还没用万矿?
  7. Qt-ros插件:创建工程,编译实现操控小乌龟(二)
  8. 前端学习(2372):uni-ui库
  9. java tcp实现_JAVA 通过 Socket 实现 TCP 编程
  10. c语言对抗程序代码,C语言贪吃蛇源程序代码双人对抗
  11. 关于程序员面试时的智力题集锦
  12. 100天搞定机器学习|Day4-6 逻辑回归
  13. linux面试基础考题
  14. Android GPS开发总结
  15. LACP链路聚合控制协议
  16. ubuntu mysql的my.cnf_Ubuntu下面MySQL的参数文件my.cnf浅析
  17. 12306火车票余票自动查询 Python selenium
  18. 查看局域网内其它电脑名称和IP
  19. java定义hashmap_Java用自定义的类型作为HashMap的key
  20. 什么是位移电流?位移电流密度计算公式详解

热门文章

  1. linux lua socket编程,CentOs 安装lua,luasocket
  2. qbuttongroup如何都不选中_全程马拉松,半程马拉松该如何跑?很多人都不知道这些细节...
  3. c语言中二重指针如何赋值,关于二重指针释放的有关问题
  4. as本地仓库更改_将gitee仓库连接GitHub Desktop。新建更改仓库并上传至gitee。
  5. 两个list怎么对比数据_基于日志的回放对比系统设计
  6. python numpy数据类型_python numPy模块 与numpy里的数据类型、数据类型对象dtype
  7. mac 配置php和mysql_Mac下配置PHP+MySql环境
  8. leetcode150. 逆波兰表达式求值
  9. 39. 组合总和020(思路+详解)
  10. [汇编语言]常用命令