链接:https://www.nowcoder.com/acm/contest/161/B
来源:牛客网

题目描述

小N和小O在玩游戏。他们面前放了n堆石子,第i堆石子一开始有ci颗石头。他们轮流从某堆石子中取石子,不能不取。最后无法操作的人就输了这个游戏。但他们觉得这样玩太无聊了,更新了一下规则。具体是这样的:对于一堆有恰好m颗石子的石头堆,假如一个人要从这堆石子中取石子,设他要取石子数为d,那么d必须是m的约数。最后还是无法操作者输。
现在小N先手。他想知道他第一步有多少种不同的必胜策略。一个策略指的是,从哪堆石子中,取走多少颗石子。只要取的那一堆不同,或取的数目不同,都算不同的策略。

输入描述:

第一行一个整数n。
接下来一行n个整数,分别代表每堆石子的石子数目。
数据保证输入的所有数字都不超过105,均大于等于1,且为整数。

输出描述:

一行一个整数代表小$N$第一步必胜策略的数量。

示例1

输入

复制

10
47 18 9 36 10 1 13 19 29 1

输出

复制

7

明明是个裸的板子题自己却不会搞,明明多校见过很多次因子表的打法,死活打不出来1e5的因子表。

 //因子表打法for(int i=1;i<=n;i++)for(int j=1;j*i<=n;j++){q[i*j].push_back(i);}

这次一定要记住这三行代码。

然后就可以打出来1到100000的sg函数表了。sg函数不了解的可以戳  https://mp.csdn.net/postedit/81512877

会了SG函数后poj2975这种题你一定会了。这题就和poj2975很像了。我们每次减去一个数的因子,然后判断下剩下的值的异或值是不是0即可。先手取因子后,如果剩下的数的SG值为0的话,那么后手必败。还有一点要注意异或运算符优先级低,记得加括号。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define N 100001int f[N],sg[N],has[N];
vector<int> q[100005];
void getSG(int n)
{for(int i=1;i<=n;i++)for(int j=1;j*i<=n;j++){q[i*j].push_back(i);}memset(sg,0,sizeof(sg));for(int i=1;i<=n;i++){int len=q[i].size();for(int j=0;j<len;j++)has[sg[i-q[i][j]]]=1;for(int j=0;j<=n;j++){if(has[j]==0){sg[i]=j;break;}}for(int j=0;j<len;j++)has[sg[i-q[i][j]]]=0;}
}
int a[100005];
int main()
{   int n;getSG(100000);scanf("%d",&n);int ans=0;for(int i=1;i<=n;i++){int x;cin>>x;a[i]=x;ans^=sg[x];}int sum=0;for(int i=1;i<=n;i++){for(int j=0;j<q[a[i]].size();j++)if((sg[a[i]-q[a[i]][j]]^(ans^sg[a[i]]))==0) sum++;}printf("%d\n",sum);return 0;
}

Wannafly挑战赛23 (SG函数)相关推荐

  1. Wannafly挑战赛 23 B 游戏(SG函数运用)

    链接:https://www.nowcoder.com/acm/contest/161/B 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524 ...

  2. 题解——牛客网Wannafly挑战赛23 B-游戏 (SG函数)

    前言 比赛的时候没学过SG函数的蒟蒻以为是道结论题,但是不是QwQ 和dummyummy巨佬一起推了快三个小时的规律 最后去问了真正的巨佬__stdcall __stdcall面带微笑的告诉我们,这是 ...

  3. 【Wannafly挑战赛23】B 游戏【SG函数】

    链接:https://www.nowcoder.com/acm/contest/161/B 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524 ...

  4. Wannafly挑战赛23 A 字符串

    题目描述 小N现在有一个字符串S.他把这这个字符串的所有子串都挑了出来.一个S的子串T是合法的,当且仅当T中包含了所有的小写字母.小N希望知道所有的合法的S的子串中,长度最短是多少. 输入描述: 一行 ...

  5. 一类SG函数递推性质的深入分析——2018ACM陕西邀请赛H题

    题目描述 定义一种有根二叉树\(T(n)\)如下: (1)\(T(1)\)是一条长度为\(p\)的链: (2)\(T(2)\)是一条长度为\(q\)的链: (3)\(T(i)\)是一棵二叉树,它的左子 ...

  6. hdu1848(sg函数打表)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1848 题意:中文题诶- 思路:直接sg函数打表就好了 代码: 1 #include <iostr ...

  7. [Wannafly挑战赛2D-Delete]最短路

    [Wannafly挑战赛2D-Delete]最短路 题目描述 给定一张 n 个点,m 条边的带权有向无环图,同时给定起点 S 和终点 T ,一共有 q 个询问,每次询问删掉某个点和所有与它相连的边之后 ...

  8. Wannafly挑战赛24

    Wannafly挑战赛24 题目连接 https://www.nowcoder.com/acm/contest/186#question A.石子游戏 题解 注意到当石子个数为偶数的时候,每回合都会减 ...

  9. HDU 1846-Brave Game(巴什博弈-SG函数)

    Brave Game Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

最新文章

  1. 谈一谈flex布局使用中碰到的一些问题
  2. mysql 一对多 关联一条最新的数据_不得不会的mysql锁
  3. R 学习 - 图形设置中英字体
  4. java图形界面关键字_怎样用Java编写一个图形界面,要求可以利用关键词查询txt中的内容...
  5. 洛谷 P3382 【模板】三分法
  6. spring源码-第三个后置处理器
  7. eclipse svn回滚之前版本
  8. matlab中linspace函数用法
  9. c语言int作用,C语言中的int max(int x,int y) 究竟有何作用?
  10. 计算机各种办公软件都很卡,电脑中打开office2016办公软件很卡的解决方法
  11. 数据分析 | 多元线性回归
  12. 使用Springboot+Feign Clients快速搭建REST客户端应用
  13. Linux文件属性的777权限
  14. 为什么打印还要另存为_为什么打印图片时出现文件另存为
  15. linux内核中内存耗尽OOM killer
  16. Metasploit(二)
  17. cisco路由器的时间标记
  18. MySQL完全卸载,mysql服务清理
  19. 详解两类AI芯片架构和关键技术
  20. HTML标签之文本标签

热门文章

  1. JDK13中将增加文本块特性
  2. c语言中menu有什么作用,menu是什么意思 menu有什么作用呢
  3. docker拉取镜像,dns无法解析网址解决方法
  4. 这可能是全网最详细的Node.js编程
  5. 计算机专业课德育,中职计算机专业课教学中德育渗透方法探索.doc
  6. field与item的区分
  7. 毛坯房验房的标准与内容
  8. python奇数的表达式_python – 递归检查奇数或偶数
  9. 计算机系电脑推荐,计算机专业电脑推荐2020-计算机专业电脑榜单
  10. 凌恩生物美文分享|转录组研究利器——三代全长转录组测序(Iso-Seq)