HDU 4664 Triangulation(SG函数)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4664
题意:给出一个n个点的凸包(不存在三点共线)。每次可以选择两个点连线,但是任意两条线只能在顶点处相交。若某一方连完线先后出现一个三角形,则该方为胜者,游戏结束。现在有若干个这样的凸包,每次双方可选择任意一个凸包连线。但是某个凸包一旦被连成一个三角形,则不能在该凸包上连线。
思路:因为若一条线的两个端点之一已经有一条线通过,则该条线连完之后必输。因此一个凸包连一条线就是将这个凸包分成两部分,因此可计算n个点时的SG值。最后发现,前69个没规律,从n=70开始循环节为34。
int SG[N];
int DFS(int n)
{
if(n<=1) return 0;
if(SG[n]!=-1) return SG[n];
int p[50]={0},i;
for(i=0;i<=n-2;i++)
{
p[DFS(i)^DFS(n-2-i)]=1;
}
i=0;
while(p[i]) i++;
return i;
}
int cal(int x)
{
if(x<=1) return 0;
return DFS(x);
}
void init()
{
clr(SG,-1);
int i;
FOR0(i,N) SG[i]=cal(i);
}
int n;
int get(int x)
{
if(x<=69) return SG[x];
x=x-69;
x=(x-1)%34+1+69;
return SG[x];
}
int main()
{
init();
rush()
{
RD(n);
int i,x,ans=0;
FOR1(i,n) RD(x),ans^=get(x);
if(ans) puts("Carol");
else puts("Dave");
}
}
HDU 4664 Triangulation(SG函数)的更多相关文章
- S-Nim HDU 1536 博弈 sg函数
S-Nim HDU 1536 博弈 sg函数 题意 首先输入K,表示一个集合的大小,之后输入集合,表示对于这对石子只能去这个集合中的元素的个数,之后输入 一个m表示接下来对于这个集合要进行m次询问,之 ...
- hdu 1848 简单SG函数
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1848 Problem Description 任何一个大学生对菲波那契数列(Fibonacci num ...
- HDU 4664 Triangulation(2013多校6 1010题,博弈)
Triangulation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- hdu 4664 Triangulation(题意已在讨论版中说明)
题意: 给定n个平面(平面之间相互独立),每个平面上有一些点,并且构成凸集,C和D轮流选一个平面连接两个点画线段,并保证线段之间除了端点之外没有其它交点,当平面上出现一个完整的三角形之后此平面就不能继 ...
- hdu 4664 Triangulation 博弈论
看到这题时,当时还不会做,也没搞懂sg函数,于是狠狠的钻研了下博弈论,渐渐的知道了sg函数…… 现在在来做这题就很容易了,1A 打表容易发现在80左右的时候就出现循环节了 代码如下: #include ...
- HDU 4664 Triangulation【博弈论】
一个平面上有n个点(一个凸多边形的顶点),每次可以连接一个平面上的两个点(不能和已经连接的边相交),如果平面上已经出现了一个三角形,则不能在这个平面上继续连接边了. 现在总共有N个平面,每个平面上都有 ...
- hdu 1809 求SG函数
A New Tetris Game(2) Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- HDU 5742 Chess SG函数博弈
Chess Problem Description Alice and Bob are playing a special chess game on an n × 20 chessboard. ...
- Alice and Bob HDU - 4111 (SG函数)
Alice and Bob are very smart guys and they like to play all kinds of games in their spare time. The ...
随机推荐
- html公用库
<script src="http://lib.sinaapp.com/js/jquery/1.6/jquery.min.js" language="javascr ...
- mongo 1067错误
对mongo进行错误的操作导致mongo服务异常关闭,当重启mongo服务时出现1067错误此时在data目录下产生mongod.lock文件,可以讲此文件删除,然后重启就可以了 Please mak ...
- E3: PS4/PC 莎木3 众筹200万美元 9小时内达成
这次E3任天堂没有新掌机(传说中的XDS呢.呵呵)和口袋的消息, 被喷得很严重, 索尼的FF7重制版和莎木3是亮点. 而莎木3的众筹速度据说创了记录, 玩家的情怀大胜. 笔者看到国内也有赞助几十刀的玩 ...
- WaitForTargetFPS
WaitForTargetFPS,是关于帧数限制的,你可能开了垂直同步,其实是防止撕裂.先说撕裂,在显示器的帧缓存会被不同步的显卡的帧缓存给替换掉,导致显示器显示到一半的时候,内存被换掉,你看到上频是 ...
- Javascript的怪癖
1.匿名函数在不闭包的情况下this对象为window,而在双匿名闭包的情况下内部匿名函数的this对象为window. 2.在函数中定义变量,在函数外部想使用该变量,如果变量声明时有var,则访问不 ...
- Wildcard Matching
Implement wildcard pattern matching with support for '?' and '*'. '?' Matches any single character. ...
- POJ 1468
#include <iostream> #define MAXN 5005 using namespace std; struct node { int b_x; int b_y; int ...
- POJ 1458
#include <iostream> #include <string> #define MAXN 1000 using namespace std; string s_1; ...
- Activity学习(四)——简单切换
理论学习Activity之后,我们就来具体的实战,Activity之间相互切换依靠的是“ 意图 ”(Intent),这个 Intent 包含了要跳转到的Activity的一些信息,因为Activity ...
- Android activity属性
android:allowTaskReparenting 是否允许activity更换从属的任务,比如从短信息任务 切换到浏览器任务. android:alwaysRetainTaskState 是否 ...