题解——牛客网Wannafly挑战赛23 B-游戏 (SG函数)
前言
比赛的时候没学过SG函数的蒟蒻以为是道结论题,但是不是QwQ
和dummyummy巨佬一起推了快三个小时的规律
最后去问了真正的巨佬__stdcall
__stdcall面带微笑的告诉我们,这是SG函数的板子题
QwQ
被卡科技了
体验极差
正文
题目
链接:https://www.nowcoder.com/acm/contest/161/B
来源:牛客网
题目描述
现在小N先手。他想知道他第一步有多少种不同的必胜策略。一个策略指的是,从哪堆石子中,取走多少颗石子。只要取的那一堆不同,或取的数目不同,都算不同的策略。
输入描述:
第一行一个整数n。
接下来一行n个整数,分别代表每堆石子的石子数目。
数据保证输入的所有数字都不超过\( 10^{5} \),均大于等于1,且为整数。
输出描述:
一行一个整数代表小$N$第一步必胜策略的数量。
输入
10
47 18 9 36 10 1 13 19 29 1
输出
7
题解
题目让求第一步必胜策略的数量
那就是求第一步走后有多少个状态是必败态
组合的Nim游戏模型
求出SG函数,然后枚举每个数和它的约数
累加一下ans
完毕
代码
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <vector>
#include <cmath>
using namespace std;
vector<int> g[];
int qz[],hz[],n,a[],SG[]={},f[];
int ans=,maxa;
void sg(void){
for(int i=;i<=n;i++)
for(int j=;j<=sqrt(a[i]);j++)
if(a[i]%j==){
if(a[i]/j==j)
g[i].push_back(j);
else{
g[i].push_back(j);
g[i].push_back(a[i]/j);
}
}
return;
}
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d",&a[i]),maxa=max(a[i],maxa);
SG[]=;
for(int i=;i<=maxa;i++) {
int tt;
for(int k=,j=;;j*=,k+=) {
if(i%j==*(j/)||i%j==*(j/)) tt=k-;
if(i%j==*(j/)) tt=k;
if(i%j!=) break;
}
SG[i]=tt;
}
sg();
// for(int i=0;i<=maxa;i++)
// printf("SG[%d]=%d\n",i,SG[i]);
for(int i=;i<=n;i++)
qz[i]=qz[i-]^SG[a[i]];
for(int j=n;j>=;j--)
hz[j]=hz[j+]^SG[a[j]];
for(int i=;i<=n;i++){
for(int j=;j<g[i].size();j++)
if(!((qz[i-]^hz[i+])^SG[a[i]-g[i][j]]))
ans++;
}
printf("%d",ans);
return ;
}
题解——牛客网Wannafly挑战赛23 B-游戏 (SG函数)的更多相关文章
- Wannafly挑战赛23 T2游戏 SG函数
哎,被卡科技了,想了三个小时,最后还是大佬给我说是\(SG\)函数. \(SG\)函数,用起来很简单,证明呢?(不可能的,这辈子都是不可能的) \(SG\)定理 游戏的\(SG\)函数就是各个子游戏的 ...
- 牛客网 Wannafly挑战赛9 C.列一列-sscanf()函数
C.列一列 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 262144K,其他语言524288K64bit IO Format: %lld 链接:https://www.now ...
- 牛客网 Wannafly挑战赛8 A.小Y和小B睡觉觉
写了一会不想写了... A-小Y和小B睡觉觉 链接:https://www.nowcoder.com/acm/contest/57/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制: ...
- 牛客网 Wannafly挑战赛 C 列一列 简单题 (题目有点坑)
链接:https://www.nowcoder.com/acm/contest/71/C来源:牛客网 题目描述 小W在计算一个数列{An},其中A1=1,A2=2,An+2=An+1+An.尽管他计算 ...
- 牛客网Wannafly挑战赛25A 因子(数论 素因子分解)
链接:https://www.nowcoder.com/acm/contest/197/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...
- 牛客网 Wannafly挑战赛27 蓝魔法师
蓝魔法师 链接: https://www.nowcoder.com/acm/contest/215/C 来源:牛客网 题目描述 "你,你认错人了.我真的,真的不是食人魔."--蓝魔 ...
- 牛客网 Wannafly挑战赛8 B.LBJX的三角形
B-LBJX的三角形 链接:https://www.nowcoder.com/acm/contest/57/B来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32768K, ...
- 牛客网 Wannafly挑战赛11 B.白兔的式子-组合数阶乘逆元快速幂
链接:https://www.nowcoder.com/acm/contest/73/B来源:牛客网 B.白兔的式子 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 262144K, ...
- 牛客网 Wannafly挑战赛11 A.白兔的分身术
水一水博客. 链接:https://www.nowcoder.com/acm/contest/73/A来源:牛客网 A.白兔的分身术 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C ...
随机推荐
- Marlin 溫度 sensor 校正
Marlin 溫度 sensor 校正 使用 Type-K 溫度計 將探針綑綁在加熱頭側面 開啟Marlin-Marlin_v1\Marlin\thermistortables.h 要修改的溫度對應表 ...
- FILE文件删除操作(删除指定文件夹下所有文件和文件夹包括子文件夹下所有文件和文件夹),就是删除所有
2018-11-05 19:42:08开始写 选择 删除 1.FileUtils.java类 import java.io.File;//导入包 import java.util.List;//导入 ...
- jQuery属性--addClass()和removeClass()
addClass(class|fn) 概述 为每个匹配的元素添加指定的类名 参数 class 一个或多个要添加到元素中的CSS类名,请用空格分开: function(index, class) ...
- 【Elasticsearch学习之二】Elasticsearch Rest风格操作
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 elasticsearch-2.2.0 一.Rest简介Re ...
- EasyUi通过OCUpload上传及POI上传 实现导入xls表格功能
Easyui上传文件案例 第一步:要想使用OCUpload首先前端需要导入js包 <script type="text/javascript" src=&qu ...
- 费马小定理与GCD&LCM
若 t = 1 , a ^ ( p - 2 ) 为 a 在取模 p 意义下的乘法逆元 通常用 inv 表示 证明: b * a =(三等)1(mod p) a ^ ( p - 2 ) * a =(三 ...
- Django框架----logging配置
我写Django项目常用的logging配置.(追加在setting.py文件中) LOGGING = { 'version': 1, 'disable_existing_loggers': Fals ...
- SVN如何将版本库url访问地址中的https改为http
1.选择控制台树中的根节点,右键选择“属性”. 2.切换至面板“网络”. 3.取消勾选项“使用安全连接协议(https://)”.
- win7使用问题解决
1. VM和主机互相PING不通 问题:桥接模式,VM可以ping 通外网,可以ping 通局域网其它机子,就是ping 不通本地主机 解决:将 vm网卡和本地网连接网卡都共享出来
- Android之数据存储之SharedPreferences
SharedPreferences是以键值对形式存储数据,主要用于记录系统的设置,如飞行模式是否开启,声音大小的值等.//SharedPreferences方式保存到xml文件SharedPrefer ...