Wannafly挑战赛23 (SG函数)
链接: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函数)相关推荐
- Wannafly挑战赛 23 B 游戏(SG函数运用)
链接:https://www.nowcoder.com/acm/contest/161/B 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524 ...
- 题解——牛客网Wannafly挑战赛23 B-游戏 (SG函数)
前言 比赛的时候没学过SG函数的蒟蒻以为是道结论题,但是不是QwQ 和dummyummy巨佬一起推了快三个小时的规律 最后去问了真正的巨佬__stdcall __stdcall面带微笑的告诉我们,这是 ...
- 【Wannafly挑战赛23】B 游戏【SG函数】
链接:https://www.nowcoder.com/acm/contest/161/B 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524 ...
- Wannafly挑战赛23 A 字符串
题目描述 小N现在有一个字符串S.他把这这个字符串的所有子串都挑了出来.一个S的子串T是合法的,当且仅当T中包含了所有的小写字母.小N希望知道所有的合法的S的子串中,长度最短是多少. 输入描述: 一行 ...
- 一类SG函数递推性质的深入分析——2018ACM陕西邀请赛H题
题目描述 定义一种有根二叉树\(T(n)\)如下: (1)\(T(1)\)是一条长度为\(p\)的链: (2)\(T(2)\)是一条长度为\(q\)的链: (3)\(T(i)\)是一棵二叉树,它的左子 ...
- hdu1848(sg函数打表)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1848 题意:中文题诶- 思路:直接sg函数打表就好了 代码: 1 #include <iostr ...
- [Wannafly挑战赛2D-Delete]最短路
[Wannafly挑战赛2D-Delete]最短路 题目描述 给定一张 n 个点,m 条边的带权有向无环图,同时给定起点 S 和终点 T ,一共有 q 个询问,每次询问删掉某个点和所有与它相连的边之后 ...
- Wannafly挑战赛24
Wannafly挑战赛24 题目连接 https://www.nowcoder.com/acm/contest/186#question A.石子游戏 题解 注意到当石子个数为偶数的时候,每回合都会减 ...
- HDU 1846-Brave Game(巴什博弈-SG函数)
Brave Game Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
最新文章
- 谈一谈flex布局使用中碰到的一些问题
- mysql 一对多 关联一条最新的数据_不得不会的mysql锁
- R 学习 - 图形设置中英字体
- java图形界面关键字_怎样用Java编写一个图形界面,要求可以利用关键词查询txt中的内容...
- 洛谷 P3382 【模板】三分法
- spring源码-第三个后置处理器
- eclipse svn回滚之前版本
- matlab中linspace函数用法
- c语言int作用,C语言中的int max(int x,int y) 究竟有何作用?
- 计算机各种办公软件都很卡,电脑中打开office2016办公软件很卡的解决方法
- 数据分析 | 多元线性回归
- 使用Springboot+Feign Clients快速搭建REST客户端应用
- Linux文件属性的777权限
- 为什么打印还要另存为_为什么打印图片时出现文件另存为
- linux内核中内存耗尽OOM killer
- Metasploit(二)
- cisco路由器的时间标记
- MySQL完全卸载,mysql服务清理
- 详解两类AI芯片架构和关键技术
- HTML标签之文本标签
热门文章
- JDK13中将增加文本块特性
- c语言中menu有什么作用,menu是什么意思 menu有什么作用呢
- docker拉取镜像,dns无法解析网址解决方法
- 这可能是全网最详细的Node.js编程
- 计算机专业课德育,中职计算机专业课教学中德育渗透方法探索.doc
- field与item的区分
- 毛坯房验房的标准与内容
- python奇数的表达式_python – 递归检查奇数或偶数
- 计算机系电脑推荐,计算机专业电脑推荐2020-计算机专业电脑榜单
- 凌恩生物美文分享|转录组研究利器——三代全长转录组测序(Iso-Seq)