http://www.lydsy.com/JudgeOnline/problem.php?id=3576 (题目链接)

题意

  给出一个数$F$,然后$n$堆石子,每次操作可以把一堆不少于$F$的石子分成$m$堆,$m$是玩家任选的不少于$2$的正整数,这$m$堆石子中最多的一堆与最少的一堆之差不超过$1$,问是否存在先手必胜。

Solution

  对每一个子游戏考虑如何求解$SG$函数。

  假设当前一堆中有$i$石子,我们想把它分成$j$堆,那么石子数为$k=\lfloor{i/j}\rfloor+1$的有$x=i-j*k$堆,石子数为$k$的有$y=i-x$堆。而此时的$SG[i]=[(x\&1)*SG[k+1]]~XOR~[(y\&1)*SG[k]]$。考虑到$k$的取值只有$\sqrt{i}$种,我们可以枚举$j$,那么怎么确定$x,y$的奇偶性呢。$x$的奇偶性只与$j$有关,而一旦$x$确定,$y$就确定了。所以$x,y$的奇偶性只有$2$种情况,分开讨论一下就好了。

代码

// bzoj3576
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
#define LL long long
#define inf (1ll<<60)
#define Pi acos(-1.0)
#define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
using namespace std;const int maxn=100010;
int T,F,n,SG[maxn],v[maxn];int main() {scanf("%d%d",&T,&F);for (int i=0;i<F;i++) SG[i]=0;for (int i=F;i<=100000;i++) {for (int k,pos,j=2;j<=i;j=pos+1) {k=i/j;pos=i/k;int x=i-k*j,y=j-x;v[((x&1)*SG[k+1])^((y&1)*SG[k])]=i;if (j+1<=min(pos,i)) {x=i-k*(j+1),y=j+1-x;v[((x&1)*SG[k+1])^((y&1)*SG[k])]=i;}}for (int j=0;;j++) if (v[j]!=i) {SG[i]=j;break;}//printf("%d ",SG[i]);}while (T--) {scanf("%d",&n);int ans=0;for (int x,i=1;i<=n;i++) {scanf("%d",&x);ans^=SG[x];}printf(ans ? "1" : "0");if (T) printf(" ");}return 0;
}

转载于:https://www.cnblogs.com/MashiroSky/p/6440455.html

【bzoj3576】 Hnoi2014—江南乐相关推荐

  1. Bzoj3576 [Hnoi2014]江南乐

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

  2. 【BZOJ3576】江南乐,博弈

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

  3. BZOJ 3576 江南乐

    http://www.lydsy.com/JudgeOnline/problem.php?id=3576 思路:由于数字巨大,因此N^2异或做法是过不了的,我们考虑将n个石子分成i堆,那么会有n%i堆 ...

  4. P3235-[HNOI2014]江南乐【整除分块,SG函数】

    正题 题目链接:https://www.luogu.com.cn/problem/P3235 题目大意 TTT组游戏,固定给出FFF.每组游戏有nnn个石头,每次操作的人可以选择一个数量不少于FFF的 ...

  5. # HNOI2012 ~ HNOI2018 题解

    HNOI2012 题解 [HNOI2012]永无乡 Tag:线段树合并.启发式合并 联通块合并问题. 属于\(easy\)题,直接线段树合并 或 启发式合并即可. [HNOI2012]排队 Tag:组 ...

  6. OSChina 周六乱弹 —— 老用户与狗

    2019独角兽企业重金招聘Python工程师标准>>> Osc乱弹歌单(2018)请戳(这里) [今日歌曲] @yijiangxiyang :如今却忆江南乐,当时年少春衫薄.分享杨千 ...

  7. 科大星云诗社动态20210329

    [每日一诗] 菩萨蛮(其三) 韦庄 如今却忆江南乐,当时年少春衫薄.骑马倚斜桥,满楼红袖招. 翠屏金屈曲,醉入花丛宿.此度见花枝,白头誓不归. 词人所写的既是跟一个现实的女子离别的相思怀念,也可能是暗 ...

  8. 十年磨一剑,霜刃未曾试(纪念最爱——加内特)

    十年磨一剑,霜刃未曾试 空破天狼,近天狼 艰难的童年:梦回 1976 1976年5月19日,加内特出生在南卡罗莱纳一个叫毛丁的小镇.父母在他很小的时候,就分道扬镳.加内特跟着母亲过,但她没有太多能力来 ...

  9. 陌上谁家年少,足风流

    转自:http://mxjz219.blog.sohu.com/25481441.html 春日游,杏花插满头.陌上谁家年少,足风流.妾拟将身嫁与,一生休,纵被无情弃,不能羞. 在唐五代词中,我最爱的 ...

最新文章

  1. dlib 怎么安装vs2017_VS2017(Visual Studio2017) 搭建QT5开发环境
  2. 向上转型--Upcasting
  3. dom解析和sax解析的区别及优缺点
  4. IOI 2007 Sail (线段树+贪心)
  5. Codeforces Round #233 (Div. 2)D. Painting The Wall 概率DP
  6. python是一种面相什么语言_Python面相对象编程的知识总结
  7. 面试官:编写一个 SQL 查询,找出每个部门工资第二高的员工
  8. 修改10g自动统计信息收集作业GATHER_STATS_JOB到仅仅周末执行
  9. 数字后端基本概念介绍——Row
  10. POJ3982 序列【大数】
  11. Web全栈工程师养成记
  12. 开源大数据处理引擎汇总(一)
  13. 台式计算机开机不自检不起动,台式机开机不自检怎么办
  14. Android4.0.4 framebuffer 支持32位色彩深度
  15. 关于公共安全解决方案的思考
  16. 如何修改wamp5的端口号,默认页。
  17. linux:The CXX compiler identification is unknown
  18. 【第三方互联】10、注册成为支付宝(Alipay)开发者
  19. 网盾极风云:五分钟搞懂HTTP和HTTPS
  20. 多态之父类引用指向子类对象

热门文章

  1. 面向对象真的需要继承吗?
  2. 数据结构期末复习之归并排序和基数排序
  3. 基础知识(十五)Cmake
  4. oracle 段空间收缩,Oracle10g用Shrink Space收缩Oracle数据段
  5. maven mirror 优先级
  6. 图层样式混合选项_图标设计,用PS的图层样式制作逼真的玉石图标
  7. llvm安装方式_安装 LLVM 和 Clang
  8. java多线程 文件夹_Java多线程遍历文件夹,广度遍历加多线程加深度遍历结合
  9. python selenium 文件上传_python-selenium -- 文件上传操作
  10. Java基础---代码块和final关键字