【刷题】数学知识——博弈论:移棋子游戏
移棋子游戏
该游戏是一个有向图游戏,每个棋子都是互相独立的,所以可以看成K个相同的棋盘,每个棋盘上有1个棋子。这样问题就转化成K个有向图游戏,求有向图游戏的和即可。即每个棋子的SG函数互相异或是否为0。
注意实际遍历时只要求一张图的SG函数值,由于是有向无环图而不是树,可能有多个起点,每个起点都要进行一遍搜索。
#include <iostream>
#include <cstring>
using namespace std;const int N = 2005, M = 6005;int n, m, k;
int x, y;
int nxt[M], lnk[M], head[N], idx;
bool flag[N];
int f[N];int dfs(int x) {if (f[x] != -1) return f[x];bool num[N];memset(num, 0, sizeof(num));for (int i = head[x]; i != -1; i = nxt[i]) {num[dfs(lnk[i])] = true;}for (int i = 0; i < n; i ++ ) {if (!num[i]) return f[x] = i;}
}int main() {scanf("%d%d%d", &n, &m, &k);memset(head, -1, sizeof(head));for (int i = 0; i < m; i ++ ) {scanf("%d%d", &x, &y);nxt[idx] = head[x];lnk[idx] = y;head[x] = idx ++ ;flag[y] = true;}memset(f, -1, sizeof(f));for (int i = 1; i <= n; i ++ ) {if (!flag[i]) {dfs(i);}}int ans = 0, c;for (int i = 0; i < k; i ++ ) {scanf("%d", &c);ans ^= f[c];}if (ans) printf("win\n");else printf("lose\n");return 0;
}
【刷题】数学知识——博弈论:移棋子游戏相关推荐
- [博弈论]移棋子游戏
https://www.acwing.com/problem/content/1321/ 思路: 求所有棋子的sg异或之和, 记忆化搜索 得到当前结点后继的这些点的sg值之和,放到set里面(哈希表也 ...
- [AcWing] 1319.移棋子游戏 博弈论 Sg函数板子题
题目链接:1319.移棋子游戏 题解 好久没写博弈论的题了,写几道复习一下,博弈论SG主要由两大部分组成:SG函数和SG定理 SG(x)=mex(S),其中S是x的后继状态的SG函数值集合,mex(S ...
- C#LeetCode刷题-数学
数学篇 # 题名 刷题 通过率 难度 2 两数相加 29.0% 中等 7 反转整数 C#LeetCode刷题之#7-反转整数(Reverse Integer) 28.6% 简单 8 字符串转整数 (a ...
- LeetCode刷题实战546:移除盒子
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...
- 2018.09.16 loj#10243. 移棋子游戏(博弈论)
传送门 题目中已经给好了sg图,直接在上面跑出sg函数即可. 最后看给定点的sg值异或和是否等于0就判好了. 代码: #include<bits/stdc++.h> #define N 2 ...
- 1319. 移棋子游戏(sg+图论(移棋子)邻接表)
题目:https://www.acwing.com/problem/content/1321/ 给定一个有 N 个节点的有向无环图,图中某些节点上有棋子,两名玩家交替移动棋子. 玩家每一步可将任意一颗 ...
- AcWing 1319. 移棋子游戏
sg函数是一张有向无环图 尼姆博弈对每一张图sg(值)进行游戏 就是加强版的集合尼姆博弈(集合尼姆博弈中拓展是根据集合可能的新状态),这里是回归本质,sg操作是对每个状态拓展出边,并通过出边sg值集合 ...
- 和海王一起从零刷题之(3):原地移除元素
题目: 来源:leecode_27 简述:给定一个数组,要求不借助额外空间,移除指定元素,返回数组新的长度. 如: 输入:[4,5,5,4] 5 输出:[4,4] 2 难度 介于简单和中等之间, 主要 ...
- tag数组-刷题预备知识-4.一通百通解决二分查找问题
文章目录 1. 二分法查找法的基本思想 2. 二分查找的时间复杂度 3. 二分查找的几个模版 3.1 模板一: 标准的二分查找 3.2 模板二: 二分查找边界(左边界, 右边界, 或是左右边界) 3. ...
- OJ 刷题必备知识总结(一)
前言:本篇博客内容总结自<算法笔记>.文章篇幅太长了,更多的内容请读者点击这一篇:PTA 算法笔记重点总结(二). 文章目录 1 int 与 long long 2 字符常量 3 最大整数 ...
最新文章
- 惊呆了,Spring中竟然有12种定义bean的方法
- 一、select查询
- 排序算法【稳定性+空间复杂度+时间复杂度(平均、最好、最坏)】
- linux磁盘混乱,Linux磁盘设备文件混乱源于Linux内核自身
- 如何使用Angular FormBuilder
- [js] 写一个方法判断数组内元素是否全部相同
- 论文浅尝 | Know-Evolve: Deep Temporal Reasoning for Dynamic KG
- 服务器排序规修改办法,WordPress手动修改文章排列顺序摆脱按发布时间升降序排列...
- http状态码_一些常见的HTTP状态码
- ubuntu 修改IP,网关等
- android 人脸识别边框_Android相机预览,指定区域显示预览框,在区域内出现人脸进行人脸识别,并抓拍人脸照片存在本地...
- 固态硬盘是什么接口_笔记本固态硬盘的接口有哪些?来学习下笔记本SSD小知识...
- 一文读懂Elephant Swap的LaaS方案的优势之处
- 每日必应壁纸API接口源码
- 使用Unity制作VR全景图片清晰度的问题!!!
- 用网线实现两台电脑之间的文件共享
- glusterfs之heketi 部署
- 三调地类图斑统计分析——GP后端实现
- gradle linux中文乱码,Gradle 构建 Android 应用常见问题解决指南
- Linux系统基本知识(4)