• 多边形之战(bzoj 2927)


    Description

    多边形之战是一个双人游戏。游戏在一个有n个顶点的凸多边形上进行,这个凸多边形的n-3条对角线将多边形分成n-2个三角形,这n-3条对角线在多边形的顶点相交。三角形中的一个被染成黑色,其余是白色。双方轮流进行游戏,当轮到一方时,他必须沿着画好的对角线,从多边形上切下一个三角形。切下黑色三角形的一方获胜。
    注:如果连接一个多边形中任意两点的线段都完全包含于这个多边形,则称这个多边形为凸多边形。
    求解任务:
    请设计一个程序:
           ·读入对一个多边形的描述。
    ·确定先走的一方是否能够获胜。
    ·将结果输出。

    Input

    第一行是一个整数, 4 <= n <= 50000。表示多边形的顶点数,多边形的顶点从0到n-1顺时针标号。接着的n-2行描述组成多边形的三角形。第i+1行, 1 <= i <= n-2,有三个空格分隔的非负整数a、 b、 c,它们是第i个三角形的顶点编号。第一个给出的三角形是黑色的。

    Output

    唯一一行应包含一个单词:
    TAK(波兰文“是”),表示先走的一方有必胜策略,或者
    NIE(波兰文“否”),表示先走的一方没有必胜策略。
     

    Sample Input

    6
    0 1 2
    2 4 3
    4 2 0
    0 5 4

    Sample Output

    TAK
    /*
      自己手推出来的第一道博弈论
      ①:如果黑三角形的三条边只有一条是对角线,则先手必胜。 
      ②:如果n是偶数,则先手必胜。 
      第一条很好理解,下面写一下我倒退的第二条证明过程:
      1:设对角线有t1条是三角形上的,t2条不在三角形上 。 
      2:如果先手必胜,则最后一次取数时,t1=1,t2=0,因为如果t2>0的话,后手的人上一步就一定取m中的。
      3:倒数第二次取数,t1=2,t2=0,因为如果t1=1,则后手就取走了。
      4:(t1,t2)可等效于(t1,t2%2)
      由此一直推可推出如果刚开始的t1+t2是奇数的话,先手必胜,因为t1+t2=n-3,则如果n是偶数,则先手必胜。 
    */
    #include<iostream>
    #include<cstdio>
    using namespace std;
    int v[50010];
    int main(){
        int n,a,b,c,t=0;
        scanf("%d%d%d%d",&n,&a,&b,&c);
        for(int i=1;i<=n-3;i++){
            int x,y,z;scanf("%d%d%d",&x,&y,&z);
            v[x]++;v[y]++;v[z]++;
        }
        if(!v[a])t++;
        if(!v[b])t++;
        if(!v[c])t++;
        if(t==1||n%2==0) printf("TAK");
        else printf("NIE");
        return 0;
    }
  • 相关阅读:
    上涨、下跌、震荡,我只做下跌 (有钱人赚钱太有心机!
    股票操作指南
    股票要素与心理学研究
    时序图组成
    软件描述的静态与动态
    用dedecms做网站时,空间服务器选择IIS还是apache???
    dedecms 图集标签{dede:productimagelist} {dede:field name='imgurls'}&nbs
    dede内容页调用图片集下所有图片方法!
    dede文章插入分页符不起作用,编辑器中出现分页符,导致文章显示不全
    dede织梦怎么修改description的字数
  • 原文地址:https://www.cnblogs.com/harden/p/6296202.html
Copyright © 2020-2023  润新知