zoukankan      html  css  js  c++  java
  • 暑假集训(4)第八弹——— 组合(hdu1524)

    题意概括:你已经赢得两局,最后一局是N个棋子往后移动,最后一个无法移动的玩家失败。

    题目分析:有向无环图sg值游戏,尼姆游戏的抽象表达。得到每个棋子的sg值之后,把他们异或起来,考察异或值是否为0.

     1 #include "cstdio"
     2 int figure[1004][1004];
     3 int sg[1004];
     4 int t;
     5 void fbegin()
     6 {
     7     for (int i=0;i<1004;i++)
     8      {
     9         sg[i] = -1;
    10         for (int j=0;j<1004;j++)
    11         {
    12              figure[i][j] = -1;
    13         }
    14      }
    15 }
    16 int dfs(int n)
    17 {
    18     if (sg[n] != -1)
    19          return  sg[n];
    20     int hash[1004] = {0};
    21     for (int i=0;i<t;i++)
    22     {
    23         if (figure[n][i] == 1)
    24                 hash[dfs(i)] = 1;
    25     }
    26     for (int i=0;;i++)
    27         if (hash[i] == 0)
    28             return  sg[n] = i;
    29 }
    30 int main()
    31 {
    32     int a,b,sum;
    33     while (scanf ("%d",&t) != EOF)
    34     {
    35         fbegin();
    36         for (int i=0;i<t;i++)
    37         {
    38             scanf ("%d",&a);
    39             if (!a)
    40                sg[i] = 0;
    41             while (a-- && scanf ("%d",&b))
    42             {
    43                 figure[i][b] = 1;
    44             }
    45         }
    46         while (scanf ("%d",&a) && a)
    47         {
    48             sum = 0;
    49             while (a--)
    50             {
    51                 scanf ("%d",&b);
    52                 sum ^= dfs(b);
    53             }
    54             printf ("%s
    ",sum?"WIN":"LOSE");
    55         }
    56 
    57     }
    58     return 0;
    59 }
    View Code
  • 相关阅读:
    python获取DBLP数据集
    GNUPLOT 画多组柱状图 以及 折线图 以及各种问题的解决方案
    Leetcode 1:two sum
    测试面试之如何测试一个杯子
    C++小总结
    统计‘1’的个数
    C语言小总结
    剑指offer面试题1---赋值运算符函数
    黑盒测试与白盒测试
    软件测试的原则
  • 原文地址:https://www.cnblogs.com/huas-zlw/p/5744462.html
Copyright © 2011-2022 走看看