题目链接: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函数)的更多相关文章

  1. S-Nim HDU 1536 博弈 sg函数

    S-Nim HDU 1536 博弈 sg函数 题意 首先输入K,表示一个集合的大小,之后输入集合,表示对于这对石子只能去这个集合中的元素的个数,之后输入 一个m表示接下来对于这个集合要进行m次询问,之 ...

  2. hdu 1848 简单SG函数

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1848 Problem Description 任何一个大学生对菲波那契数列(Fibonacci num ...

  3. HDU 4664 Triangulation(2013多校6 1010题,博弈)

    Triangulation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  4. hdu 4664 Triangulation(题意已在讨论版中说明)

    题意: 给定n个平面(平面之间相互独立),每个平面上有一些点,并且构成凸集,C和D轮流选一个平面连接两个点画线段,并保证线段之间除了端点之外没有其它交点,当平面上出现一个完整的三角形之后此平面就不能继 ...

  5. hdu 4664 Triangulation 博弈论

    看到这题时,当时还不会做,也没搞懂sg函数,于是狠狠的钻研了下博弈论,渐渐的知道了sg函数…… 现在在来做这题就很容易了,1A 打表容易发现在80左右的时候就出现循环节了 代码如下: #include ...

  6. HDU 4664 Triangulation【博弈论】

    一个平面上有n个点(一个凸多边形的顶点),每次可以连接一个平面上的两个点(不能和已经连接的边相交),如果平面上已经出现了一个三角形,则不能在这个平面上继续连接边了. 现在总共有N个平面,每个平面上都有 ...

  7. hdu 1809 求SG函数

    A New Tetris Game(2) Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  8. HDU 5742 Chess SG函数博弈

    Chess Problem Description   Alice and Bob are playing a special chess game on an n × 20 chessboard. ...

  9. 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 ...

随机推荐

  1. linux install

    http://www.ubuntu.org.cn/index_kylin 先在官网下个Ubuntu  是个iso 然后下个UltraISO 是个软件 插好空u盘 打开软件 在菜单栏上 点击 文件-&g ...

  2. android adb: wireless debug

    http://developer.android.com/tools/help/adb.html#wireless

  3. windows phone中ListBox的简单使用

    学习windows phone数据绑定的一点点心得,在wp系统的APP中经常遇到这样风格的软件,那它们到底怎样实现的呢?我就大致去做了一下,比较粗虐,但基本的都已经有了,实现后的结果为: 哇,这个图截 ...

  4. 【动态规划】 之最长公共子序列LCS

    int lcs_len(char *a, char *b, int c[][N]){ int aLen=strlen(a), bLen=strlen(b), i,j; ; i<=aLen; i+ ...

  5. HDU 2529 Shot (物理数学题)

    题目 解题过程: //物理数学题 #include<stdio.h> #include<string.h> #include<algorithm> using na ...

  6. 【mysql5.6】连接vs2010

    参考这篇博客:http://www.tuicool.com/articles/mUZNne 配置:vs2010项目属性里面配置包含目录和库目录. 包含目录:C:\Program Files\MySQL ...

  7. MJRefresh插件引起的错误

    添加的头部或者尾部刷新,离开这个界面的时候需要移除 - (void)dealloc {    [_tableView removeHeader];} 不同版本的处理的方式不同 报的错误: 类的一个实例 ...

  8. iOS 隐藏顶部状态栏方式和更改颜色

    plist文件里面添加 AppDelegate: //显示状态栏 [[UIApplication sharedApplication]setStatusBarHidden:NO]; //将状态栏颜色设 ...

  9. JDBC 程序的常见错误及调试方法

    详细介绍:http://dev.mysql.com/doc/refman/5.5/en/error-handling.html http://dev.mysql.com/doc/refman/5.5/ ...

  10. 在DECIMAL(m,n)的设置中,整数的位数不能大于(m-n)

    关于DB2的DECIMAL类型 创建表的时用的是DECIMAL(13,2),我认为它为13个整数位数+2为有效数字,因为在打印银行交易的FORM时遇到了难题.输出和建表的长度不一样,我们以为它会打印出 ...