• hdu4678 Mine 规律或者博弈。(博弈的sg函数不懂我是找的规律)


    链接:题意就是告诉你一个扫雷图里面每个雷的位置,有两个人,每个人都知道雷的确切位置,每个人一次可以点一部,问你谁能赢。

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=4678

    思路:整张图有三种格子,一种是空白,一种是带数字的,一种是雷。我们可以根据雷知道整张地图。如果我们点空白那么跟空白连通的数字(不可能有雷)和空白都会显示出来。也就是说数字又可以分为跟空白连着的和不连着的。整个游戏的输赢是与这局所走的总步数有着直接关系,如果是偶数那么后手赢,否则先手赢。那么与空白连着的数字一定被点与否一定会决定着真个游戏的走势,而不与空白相连的数字不管奇偶性都是要被点,他们的奇偶性是不能自身发生改变的。因为每个人都想赢,先手就要将总步数变为奇数,也就是说(空白+被其点的周围数字+独立数字)%2 == 1,而后手相反。假如独立数字是奇数,那么第一个人一定会使空白+期周围数字为偶数,方法就是在空白被点掉前要点掉一个周围数字,而第二个人为了维持步数为偶数他也会点掉数字,也就是说空白周围的数字会影响局势。而我们也可以发现当周围为偶数事,这些数字相当于没有只有空白一个会影响局势,而周围为奇数时,这个空白回影响局势。所以我们只要计算周围数字为奇数的空白个数就可以了,另外偶数的相当于一个独立的数,也就是说当周围数字个数为奇数的空白快的块数为偶数时,那么第一个人赢就要看独立数字和偶数空白数了、

    另外注意加扩栈指令

    代码:

      1 #include <stdio.h>
      2 #include <string.h>
      3 #include <iostream>
      4 #include <algorithm>
      5 #include <stdlib.h>
      6 #include <vector>
      7 #include <set>
      8 #include <queue>
      9 #include <stack>
     10 #define loop(s,i,n) for(i = s;i < n;i++)
     11 #define cl(a,b) memset(a,b,sizeof(a))
     12 #pragma comment(linker, "/STACK:1024000000,1024000000")
     13 using namespace std;
     14 int map[1005][1005];
     15 int vis[1005][1005];
     16 int n,m,k;
     17 int num,odd,uod;
     18 int to[8][2] = {{0,1},{0,-1},{1,0},{1,-1},{1,1},{-1,-1},{-1,0,},{-1,1}};
     19 int judge(int a,int b)
     20 {
     21     if(a >= 0 && a < n && b>= 0 &&b < m)
     22     return 1;
     23     return 0;
     24 }
     25 void paint(int x,int y)
     26 {
     27     int i,j;
     28     for(i = 0;i < 8;i++)
     29     {
     30         int a,b;
     31         a = x+to[i][0];
     32         b = y+to[i][1];
     33         if(judge(a,b) && !vis[a][b])
     34         map[a][b]++;
     35     }
     36 }
     37 void dfs(int x,int y)
     38 {
     39     if(map[x][y] == -1 || vis[x][y])
     40     return;
     41 
     42     vis[x][y] = 1;
     43     int i;
     44     for(i = 0;i < 8;i++)
     45     {
     46         int a,b;
     47         a = x+to[i][0];
     48         b = y+to[i][1];
     49         if(judge(a,b)&&vis[a][b] == 0)
     50         {
     51             if(map[a][b] > 0)
     52             num++,vis[a][b] = 1;
     53             else if(map[a][b] == 0)
     54             dfs(a,b);
     55         }
     56     }
     57     return;
     58 }
     59 int main()
     60 {
     61     int t,i,j,x,y;
     62    // freopen("data.txt","r",stdin);
     63     //freopen("data1.txt","w",stdout);
     64     scanf("%d",&t);
     65     int icase = 0;
     66     while(t--)
     67     {
     68         scanf("%d %d %d",&n,&m,&k);
     69         loop(0,i,n)
     70         {
     71             loop(0,j,m)
     72             map[i][j] = vis[i][j] = 0;
     73         }
     74         while(k--)
     75         {
     76             scanf("%d %d",&x,&y);
     77             map[x][y] = -1;
     78             vis[x][y] = 1;
     79             paint(x,y);
     80         }
     81         odd = uod = 0;
     82       ///*
     83         loop(0,i,n)
     84         {
     85             loop(0,j,m)
     86             {
     87                 num = 0;
     88                 if(map[i][j] == 0 && !vis[i][j])
     89                 {
     90                     dfs(i,j);
     91                     if(num%2)
     92                     odd++;
     93                     else
     94                     uod++;
     95                 }
     96             }
     97         }//*/
     98         loop(0,i,n)
     99         {
    100             loop(0,j,m)
    101             {
    102                 if(!vis[i][j] && map[i][j] > 0)
    103                 uod++;
    104             }
    105         }
    106         printf("Case #%d: ",++icase);
    107         if(uod%2 || odd%2)
    108         puts("Xiemao");
    109         else
    110         puts("Fanglaoshi");
    111     }
    112     return 0;
    113 }
    View Code
  • 相关阅读:
    Linux软件安装【JDK安装】
    接口自动化<009>:Python 接口自动化Mock使用
    接口自动化<008>:Python 自定义装饰器
    接口自动化<007>:Python 装饰器 @functools.wraps(func)
    接口自动化<006>:Python 装饰器 @retry
    接口自动化<005>:Python中*args 和 **kwargs的用法详解
    接口自动化<004>:json.dumps()、json.loads()与json.dump()、json.load()
    接口自动化<003>:request部分参数解析
    pycharm常用设置及快捷键说明
    接口自动化<002>:session.request 会话用作前后文管理器
  • 原文地址:https://www.cnblogs.com/0803yijia/p/3266475.html
Copyright © 2020-2023  润新知