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

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
小N和小O在玩游戏。他们面前放了n堆石子,第i堆石子一开始有ci颗石头。他们轮流从某堆石子中取石子,不能不取。最后无法操作的人就输了这个游戏。但他们觉得这样玩太无聊了,更新了一下规则。具体是这样的:对于一堆有恰好m颗石子的石头堆,假如一个人要从这堆石子中取石子,设他要取石子数为d,那么d必须是m的约数。最后还是无法操作者输。
现在小N先手。他想知道他第一步有多少种不同的必胜策略。一个策略指的是,从哪堆石子中,取走多少颗石子。只要取的那一堆不同,或取的数目不同,都算不同的策略。
输入描述:
第一行一个整数n。
接下来一行n个整数,分别代表每堆石子的石子数目。
数据保证输入的所有数字都不超过105,均大于等于1,且为整数。
输出描述:
一行一个整数代表小NN<script type="math/tex" id="MathJax-Element-1">N</script>第一步必胜策略的数量。
示例1
输入
10
47 18 9 36 10 1 13 19 29 1
输出
7
分析 : 暴力打出所有的石堆的SG值即可。
代码

#include <map>
#include <set>
#include <queue>
#include <stack>
#include <list>
#include <string>
#include <math.h>
#include <time.h>
#include <stdio.h>
#include <string.h>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
#define rep(i, l, r) for(int i = l; i < r; i++)
#define per(i, r, l) for(int i = r; i >= l; i--)typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int>pii;const int N = (int) 1e5 + 11;
const int M = (int) 400;
const int MOD = (int) 1e9 + 7;
const double EPS = (double) 1e-9;
const double PI = (double)acos(-1.0);
const int INF = (int) 0x3f3f3f3f;
const ll INFF = (ll) 0x3f3f3f3f3f3f3f3f;ll add(ll x, ll y){return (x += y) >= MOD ? x - MOD : x;}
ll sub(ll x, ll y){return (x -= y) < 0 ? x + MOD : x;}
void read(int &x){char ch = getchar(); x = 0;while(ch < '0' || ch > '9') ch = getchar();while(ch >= '0' && ch <= '9') { x = x * 10 + ch - '0'; ch = getchar(); }
}
/*-----------------------------------------------------------------------------------*/int SG[N], fac[400];
void  getSG(int n){ memset(SG, 0, sizeof(SG)); for(int i = 1; i  < n; i++){int id = 0;for(int j = 1; j * j <= i; j++){if(i % j == 0){fac[id++] = SG[i - j];fac[id++] = SG[i - i / j];}}sort(fac, fac + id);id = unique(fac, fac + id) - fac;int ans = 0;for(int i = 0; i < id; i++) if(ans != fac[i]) break; else ans++;    SG[i] = ans;//printf("# %d %d\n", i, ans);}
}
int main(){#ifndef ONLINE_JUDGEfreopen("in.txt", "r", stdin);freopen("out.txt", "w", stdout);#endifgetSG(100000 + 11);int n; scanf("%d", &n);vector<int>ve(n + 1);int ans = 0;for(int i = 0; i < n; i++) {scanf("%d", &ve[i]);ans ^= SG[ve[i]];//cout << SG[ve[i]] << " ";}int cnt = 0;for(int i = 0; i < n; i++){for(int j = 1; j * j <= ve[i]; j++){ // 对于每堆石子,把一步可以取的所有情况都遍历一遍if(ve[i] % j == 0){if(!((ans ^ SG[ve[i]]) ^ SG[ve[i] - j])) cnt++;if(ve[i] / j != j && !((ans ^ SG[ve[i]]) ^ SG[ve[i] - ve[i] / j]))  cnt++;}}}printf("%d\n", cnt);return 0;
}

【Wannafly挑战赛23】B 游戏【SG函数】相关推荐

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

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

  2. 组合博弈游戏 - SG函数和SG定理

    转载来自:http://blog.csdn.net/luomingjun12315/article/details/45555495 在介绍SG函数和SG定理之前我们先介绍介绍必胜点与必败点吧. 必胜 ...

  3. 组合游戏 - SG函数和SG定理

    在介绍SG函数和SG定理之前我们先介绍介绍必胜点与必败点吧. 必胜点和必败点的概念: P点:必败点,换而言之,就是谁处于此位置,则在双方操作正确的情况下必败. N点:必胜点,处于此情况下,双方操作均正 ...

  4. NIM数字游戏 SG函数 有向图博弈 学习记录

    写在前面:很早之前我就想写一写博弈论的学习记录了.本篇文章记录了我在学习博弈论初步时的顺序,现在网络上的博弈论资料大多都是从SG函数开始讲解,而我谜一样的学习方法让我对博弈论初步有了不同的理解过程,所 ...

  5. Wannafly挑战赛23 (SG函数)

    链接:https://www.nowcoder.com/acm/contest/161/B 来源:牛客网 题目描述 小N和小O在玩游戏.他们面前放了n堆石子,第i堆石子一开始有ci颗石头.他们轮流从某 ...

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

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

  7. BZOJ 1874: [BeiJing2009 WinterCamp]取石子游戏(SG函数)

    Time Limit: 5 Sec  Memory Limit: 162 MB Submit: 871  Solved: 365 [Submit][Status][Discuss] Descripti ...

  8. “科大讯飞杯”第十七届同济大学程序设计预选赛暨高校网络友谊赛 G 硬币游戏Ⅲ SG函数 /Mutli-SG 游戏 终于补完了……

    这题是Mutli-SG 的变形. 本质还是SG函数. 不考虑算法复杂度来看: 每个局面的SG值等于只有一个硬币的SG值的异或和. 我们这样想:把长度为n的字符串当成n堆石子. 从左往右第i位为1表示第 ...

  9. bzoj4600 [Sdoi2016]硬币游戏 sg函数+结论

    sg[maxQ][二的次数][三的次数]=前面的都是正面的胜负状态 C不一样的相互独立 首先顺序是不重要的,因为他有一个模仿关系. 比如   9,3是0    必胜策略是 选9翻9 .3 由于是异或, ...

最新文章

  1. [译] How to NOT React:React 中常见的反模式与陷阱
  2. 网管日志-06.08.10
  3. 会计转行算法之路(一)会计转程序员
  4. 用syslinux启动u盘
  5. Buuoj reverse1
  6. mybatis-Batch Executor
  7. Codeforces Round #723 (Div. 2)
  8. myeclipse下Tomcat java.lang.OutOfMemory Error: Java heap space
  9. linux下can调试工具canutils安装过程记录
  10. 2018华为软件精英挑战赛个人总结
  11. KETTLE 下载网址
  12. linux查看服务器时间,Linux 查看当前时间
  13. 纯css实现乌云密布的天气图标
  14. 极客时间课程笔记:业务安全
  15. mac 下Protege中使用OWL Viz插件
  16. 基于Flutter的仿微信聊天应用
  17. 视频教程-系统集成项目管理工程师考试-项目管理部分大全-软考
  18. 爬取热门微博数据2018.3.27更新
  19. 通宵总结!值得你收藏的Git命令清单(全),切莫书到用时方恨少
  20. 联想G50-70开机不显示,不进bios,不显示Lenovo标志,屏幕背光微亮闪烁,电源亮 对应主板ACLU1/ACLU2 NM-A271 REV-1.0 。完美点亮开机

热门文章

  1. 用一句话证明你是学计算机专业的,一句话证明你是程序员
  2. 22、利用递归方法求5!
  3. linux中文翻译为,Linux常见英文报错中文翻译
  4. 【C++成长日记07】
  5. 特殊符号——双引号和单引号(字符和字符串)
  6. 充分且简单!使用 Express 打造专属“轻量代理神器”
  7. 【前端三剑客三】JavaScript手术刀剖析第一篇
  8. 区块链游戏:无关技术,只要好玩
  9. phpExcel导出excel加超级链接和图片的实例代码
  10. Caffe虐心安装之路