【Wannafly挑战赛23】B 游戏【SG函数】
链接: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函数】相关推荐
- Wannafly挑战赛 23 B 游戏(SG函数运用)
链接:https://www.nowcoder.com/acm/contest/161/B 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524 ...
- 组合博弈游戏 - SG函数和SG定理
转载来自:http://blog.csdn.net/luomingjun12315/article/details/45555495 在介绍SG函数和SG定理之前我们先介绍介绍必胜点与必败点吧. 必胜 ...
- 组合游戏 - SG函数和SG定理
在介绍SG函数和SG定理之前我们先介绍介绍必胜点与必败点吧. 必胜点和必败点的概念: P点:必败点,换而言之,就是谁处于此位置,则在双方操作正确的情况下必败. N点:必胜点,处于此情况下,双方操作均正 ...
- NIM数字游戏 SG函数 有向图博弈 学习记录
写在前面:很早之前我就想写一写博弈论的学习记录了.本篇文章记录了我在学习博弈论初步时的顺序,现在网络上的博弈论资料大多都是从SG函数开始讲解,而我谜一样的学习方法让我对博弈论初步有了不同的理解过程,所 ...
- Wannafly挑战赛23 (SG函数)
链接:https://www.nowcoder.com/acm/contest/161/B 来源:牛客网 题目描述 小N和小O在玩游戏.他们面前放了n堆石子,第i堆石子一开始有ci颗石头.他们轮流从某 ...
- 题解——牛客网Wannafly挑战赛23 B-游戏 (SG函数)
前言 比赛的时候没学过SG函数的蒟蒻以为是道结论题,但是不是QwQ 和dummyummy巨佬一起推了快三个小时的规律 最后去问了真正的巨佬__stdcall __stdcall面带微笑的告诉我们,这是 ...
- BZOJ 1874: [BeiJing2009 WinterCamp]取石子游戏(SG函数)
Time Limit: 5 Sec Memory Limit: 162 MB Submit: 871 Solved: 365 [Submit][Status][Discuss] Descripti ...
- “科大讯飞杯”第十七届同济大学程序设计预选赛暨高校网络友谊赛 G 硬币游戏Ⅲ SG函数 /Mutli-SG 游戏 终于补完了……
这题是Mutli-SG 的变形. 本质还是SG函数. 不考虑算法复杂度来看: 每个局面的SG值等于只有一个硬币的SG值的异或和. 我们这样想:把长度为n的字符串当成n堆石子. 从左往右第i位为1表示第 ...
- bzoj4600 [Sdoi2016]硬币游戏 sg函数+结论
sg[maxQ][二的次数][三的次数]=前面的都是正面的胜负状态 C不一样的相互独立 首先顺序是不重要的,因为他有一个模仿关系. 比如 9,3是0 必胜策略是 选9翻9 .3 由于是异或, ...
最新文章
- [译] How to NOT React:React 中常见的反模式与陷阱
- 网管日志-06.08.10
- 会计转行算法之路(一)会计转程序员
- 用syslinux启动u盘
- Buuoj reverse1
- mybatis-Batch Executor
- Codeforces Round #723 (Div. 2)
- myeclipse下Tomcat java.lang.OutOfMemory Error: Java heap space
- linux下can调试工具canutils安装过程记录
- 2018华为软件精英挑战赛个人总结
- KETTLE 下载网址
- linux查看服务器时间,Linux 查看当前时间
- 纯css实现乌云密布的天气图标
- 极客时间课程笔记:业务安全
- mac 下Protege中使用OWL Viz插件
- 基于Flutter的仿微信聊天应用
- 视频教程-系统集成项目管理工程师考试-项目管理部分大全-软考
- 爬取热门微博数据2018.3.27更新
- 通宵总结!值得你收藏的Git命令清单(全),切莫书到用时方恨少
- 联想G50-70开机不显示,不进bios,不显示Lenovo标志,屏幕背光微亮闪烁,电源亮 对应主板ACLU1/ACLU2 NM-A271 REV-1.0 。完美点亮开机