前言

比赛的时候没学过SG函数的蒟蒻以为是道结论题,但是不是QwQ

和dummyummy巨佬一起推了快三个小时的规律

最后去问了真正的巨佬__stdcall

__stdcall面带微笑的告诉我们,这是SG函数的板子题

QwQ

被卡科技了

体验极差

正文

题目

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

题目描述

小N和小O在玩游戏。他们面前放了n堆石子,第i堆石子一开始有ci颗石头。他们轮流从某堆石子中取石子,不能不取。最后无法操作的人就输了这个游戏。但他们觉得这样玩太无聊了,更新了一下规则。具体是这样的:对于一堆有恰好m颗石子的石头堆,假如一个人要从这堆石子中取石子,设他要取石子数为d,那么d必须是m的约数。最后还是无法操作者输。
现在小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函数)的更多相关文章

  1. Wannafly挑战赛23 T2游戏 SG函数

    哎,被卡科技了,想了三个小时,最后还是大佬给我说是\(SG\)函数. \(SG\)函数,用起来很简单,证明呢?(不可能的,这辈子都是不可能的) \(SG\)定理 游戏的\(SG\)函数就是各个子游戏的 ...

  2. 牛客网 Wannafly挑战赛9 C.列一列-sscanf()函数

      C.列一列   时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 262144K,其他语言524288K64bit IO Format: %lld 链接:https://www.now ...

  3. 牛客网 Wannafly挑战赛8 A.小Y和小B睡觉觉

    写了一会不想写了... A-小Y和小B睡觉觉 链接:https://www.nowcoder.com/acm/contest/57/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制: ...

  4. 牛客网 Wannafly挑战赛 C 列一列 简单题 (题目有点坑)

    链接:https://www.nowcoder.com/acm/contest/71/C来源:牛客网 题目描述 小W在计算一个数列{An},其中A1=1,A2=2,An+2=An+1+An.尽管他计算 ...

  5. 牛客网Wannafly挑战赛25A 因子(数论 素因子分解)

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

  6. 牛客网 Wannafly挑战赛27 蓝魔法师

    蓝魔法师 链接: https://www.nowcoder.com/acm/contest/215/C 来源:牛客网 题目描述 "你,你认错人了.我真的,真的不是食人魔."--蓝魔 ...

  7. 牛客网 Wannafly挑战赛8 B.LBJX的三角形

    B-LBJX的三角形 链接:https://www.nowcoder.com/acm/contest/57/B来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32768K, ...

  8. 牛客网 Wannafly挑战赛11 B.白兔的式子-组合数阶乘逆元快速幂

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

  9. 牛客网 Wannafly挑战赛11 A.白兔的分身术

    水一水博客. 链接:https://www.nowcoder.com/acm/contest/73/A来源:牛客网 A.白兔的分身术     时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C ...

随机推荐

  1. jquer文字闪烁简单实现

    arguments.callee <script type="text/javascript"> (function () { $(".usesend&quo ...

  2. Java基础(basis)-----关键字break、continue、return的区别

       1.break      break只能用于switch语句和循环语句中,跳出当前循环:但是如果是嵌套循环, 则只能跳出当前的这一层循环,只有逐层break才能跳出所有循环 for (int i ...

  3. 原型设计模式 Prototype

    参考1 http://www.cnblogs.com/libingql/p/3633377.html http://www.cnblogs.com/promise-7/archive/2012/06/ ...

  4. 功能的显著性分析——GO Enrichment Analysis

      Gene Ontology(GO)是基因功能国际标准分类体系.GO富集分析是对差异基因等按GO分类,并对分类结果进行基于离散分布的显著性分析.错判率分析.富集度分析,得到与实验目的有显著联系的.低 ...

  5. python os.path.expanduser()

    # Expand the user's home directory

  6. golang学习笔记5 用bee工具创建项目 bee工具简介

    golang学习笔记5 用bee工具创建项目 bee工具简介 Bee 工具的使用 - beego: 简约 & 强大并存的 Go 应用框架https://beego.me/docs/instal ...

  7. JustOj 2039: 成绩排名 (结构体排序)

    题目描述 每次期末考试成绩出来之前的一段时间大豪哥心里都是痛苦的,总感觉自己会在班上排名特别差.所以当成绩出来以后大豪哥想快点知道班上的总排名,以便知道自己的排名.(PS:大豪哥班上有个学霸名叫日天, ...

  8. tcpdump 命令

    tcpdump命令高级网络 tcpdump命令是一款sniffer工具,它可以打印所有经过网络接口的数据包的头信息,也可以使用-w选项将数据包保存到文件中,方便以后分析. 选项 -a:尝试将网络和广播 ...

  9. How many zero's and how many digits ? UVA - 10061

    Given a decimal integer number you will have to find out how many trailing zeros will be there in it ...

  10. Piggy-Bank HDU - 1114

    Before ACM can do anything, a budget must be prepared and the necessary financial support obtained. ...