题意:有N个平面,每个平面有一些点,两个人在玩游戏,每轮将2个点连起来,连线不可交其他已连的线,谁先连出一个空的三角形或者对方不可连线,他在这个平面内就胜出,但对方可以在其他平面连线,最后谁动不了谁就败,问胜出者谁。

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4664

——>>第6场多校题,比起前面的5场,更难了……

比赛时一直在纠结——空三角形?题目又不给出坐标,怎么知道连线所成的三角形是不是空三角形——>想不到,可以把一个平面内所有的点看成恰恰组成一凸包,那么在所画连线不相交的前提下,若连成三角形,则一定是空的。

另一个问题——>1个人连了一条边,那么这条边的两个点,另一个人还能用么——>Clarification中有回答:可以。

——>>求每个平面的SG函数,再求Nim和。

对于一个平面,设其有n个点,则其状态为n,先连一条线,这条线的左边有j个点,则这条线的右边有n-j-2个点,则n的这个子状态的SG函数为SG[j] ^ SG[i-j-2],枚举所有的连线,求出所有子状态的SG值,最后求出这个平面的SG值。

假设平面有0个点,1个点,2个点,3个点,……,500个点,分别求出SG值,发现如下(看了解题报告已知道循环节为34,真不容易找~)

void getSG(){int i, j;SG[0] = SG[1] = 0;for(i = 2; i < maxn; i++){memset(vis, 0, sizeof(vis));for(j = 0; j <= i-2; j++) vis[SG[j] ^ SG[i-j-2]] = 1;for(j = 0; j < maxn; j++) if(!vis[j]){SG[i] = j;break;}}
}

前面53个数,也就是平面点数在[0, 52]时,某几个点有点特殊,而点数[53, )以后就呈现出周期。

于是,打表。

#include <cstdio>
#include <cstring>using namespace std;int sg[] = {0, 0, 1, 1, 2, 0, 3, 1, 1, 0, 3, 3, 2, 2, 4, 0, 5, 2, 2, 3, 3, 0, 1, 1, 3, 0, 2, 1, 1, 0, 4, 5, 2, 7, 4, 0, 1, 1, 2, 0, 3, 1, 1, 0, 3, 3, 2, 2, 4, 4, 5, 5, 2};
int SG[] = {4, 8, 1, 1, 2, 0, 3, 1, 1, 0, 3, 3, 2, 2, 4, 4, 5, 5, 9, 3, 3, 0, 1, 1, 3, 0, 2, 1, 1, 0, 4, 5, 3, 7};int main()
{int T, N, n, i;scanf("%d", &T);while(T--){scanf("%d", &N);int s = 0;for(i = 0; i < N; i++){scanf("%d", &n);if(n <= 52) s ^= sg[n];else s ^= SG[n % 34];}puts(s ? "Carol" : "Dave");}return 0;
}

hdu - 4664 - Triangulation(博弈SG)相关推荐

  1. hdu 4664 Triangulation

    // 题意: 给定N个平面,每个平面有ni个点 // ni个点组成一个凸多边形 // // 然后在N个平面上进行游戏,每次选取一个平面进行 // 在每个平面上可以选择两个点链接一条直线 // 每次选择 ...

  2. HDU 1564 简单博弈 水

    n*n棋盘,初始左上角有一个石头,每次放只能在相邻的四个位置之一,不能操作者输. 如果以初始石头编号为1作为后手,那么对于每次先手胜的情况其最后一步的四周的编号必定是奇数,且此时编号为偶数,而对于一个 ...

  3. HDU 1846 Brave Game 巴什博弈 SG打表

    题目: http://acm.hdu.edu.cn/showproblem.php?pid=1846 题意: Problem Description 十年前读大学的时候,中国每年都要从国外引进一些电影 ...

  4. (巴什博弈 sg函数入门1) Brave Game -- hdu -- 1846

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=1846 首先来玩个游戏,引用杭电课件上的: (1) 玩家:2人: (2) 道具:23张扑克牌: (3) 规 ...

  5. HDU 1846-Brave Game(巴什博弈-SG函数)

    Brave Game Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  6. Fibonacci again and again HDU - 1848(尼姆博弈+SG函数的运用+SG函数详解)

    题意: 给出三堆石子(m,n,p个),两人每次只能取斐波那契数f[i]个,最先取光所有石子者取胜 题目: 任何一个大学生对菲波那契数列(Fibonacci numbers)应该都不会陌生,它是这样定义 ...

  7. HDU 1404 Digital Deletions(博弈 + SG函数打表)

    Digital Deletions 思路 一道博弈论的题目,考虑到题目所给的范围是字符长度为1−>61-> 61−>6,所以我们可以考虑暴力打表出10610 ^ 6106内的所有状态 ...

  8. S-Nim (HDU 1536)组合博弈SG多组游戏

    S-Nim 题目链接 Problem Description Arthur and his sister Caroll have been playing a game called Nim for ...

  9. 【博弈论】博弈论入门笔记(四类基础博弈+SG函数)

    『博弈论定义』 博弈论又被称为对策论(Game Theory):是二人或多人在平等的对局中各自利用对方的策略变换自己的对抗策略,达到取胜目标的理论.博弈论是研究互动决策的理论.博弈可以分析自己与对手的 ...

最新文章

  1. vue防抖和节流是什么_防抖和节流为什么重要!!!
  2. 禁用导航栏的右滑返回实现全屏手势返回
  3. c语言代码测试电脑性能,【图片】今天写几个性能测试,为什么C语言跑得这么慢呢??【c语言吧】_百度贴吧...
  4. [Linux] 如何让linux加载当前目录的动态库
  5. 3.7.1 - Strings
  6. 7z增量更新参数使用
  7. 使用免费ssl证书在iis6 https的配置方法!
  8. 重置IE浏览器的操作
  9. mybatis中的事务
  10. PythonR LEfSe 分析
  11. 解决IPOD NANO7无法开机
  12. LA 5713 Qin Shi Huang's National Road System 最小生成树
  13. java单词大全_编程常用英语单词大全
  14. Spring Boot 中yml文件小图标不正确解决方案
  15. RK3399平台开发系列讲解(网络篇)7.11、图解Linux网络包接收过程
  16. 输出复杂的菱形(续)
  17. 北京小升初计算机编程特长生班,北京特长生小升初测试启动 家长凌晨排队取号 图...
  18. 宜明昂科在港交所递表:2021年亏损翻倍,过往融资额存在夸大情形
  19. java蓝牙对战游戏_Java 蓝牙五子棋对战
  20. vivado常见IP介绍

热门文章

  1. 泰安市康复医院5G蓝牙定位系统,医院蓝牙定位-新导智能
  2. 【Java/补题/牛客/ACM赛制】2021年ICPC国际大学生程序设计竞赛暨陕西省第九届大学生程序设计竞赛(正式赛)
  3. Scikit-Learn 与 TensorFlow 机器学习实用指南学习笔记2 — 机器学习的主要挑战
  4. LeetCode 713、乘积小于 K 的子数组
  5. Boomerang: a Metadata-Free Architecture for Control Flow Delivery
  6. 正大国际期货:做恒指要懂得顺势而为
  7. 星空银河html,银河星空拍摄的前期后期
  8. 带宽和下载速度的换算以及流量
  9. 从零开始的Django框架入门到实战教程(内含实战实例) - 01 创建项目与app、加入静态文件、模板语法介绍(学习笔记)
  10. COST 231 Hata 模型 自学笔记