• hdu


    虽说博弈,还是找规律题,-1周围dfs一次,然后在外层dfs一次,把-1的边界全都变为1就行了

    #pragma comment(linker, "/STACK:102400000,102400000")
    #include <cstdio>
    #include <cstring>
    
    int s[310][310];
    bool vis[310][310], arr[310][310];
    int n, m, p;
    int xx[] = {0, 1, 0, -1};
    int yy[] = {-1, 0, 1, 0};
    bool found;
    
    void dfs(int x, int y){
        if (x == 0 || y == 0 || x == n + 1 || y == m + 1){
            found = true;
            return;
        }
        if(vis[x][y]) return;
        vis[x][y] = true;
        if(s[x][y] >= 1) return;
        for (int i = 0; i < 4; i++)
            dfs(x + xx[i], y + yy[i]);
    }
    
    void tarjan(int x, int y){
        if (x == 0 || y == 0 || x == n + 1 || y == m + 1) return ;
        if(arr[x][y]) return;
        arr[x][y] = 1;
        if(!vis[x][y]) p += s[x][y];
        else {
            if(s[x][y] >= 2) p += s[x][y] - 1;
            return;
        }
        for (int i = 0; i < 4; i++)
            tarjan(x + xx[i], y + yy[i]);
    }
    
    int main()
    {
    //    freopen("in.txt", "r", stdin);
        while (scanf("%d%d",&n,&m) != EOF)
        {
            int opx, opy;
            for(int i = 0; i <= n + 1; ++i)
            	for(int j = 0; j <= m + 1; ++j)
            		vis[i][j] = arr[i][j] = 0;
            for (int i = 1; i <= n; i++)
                for (int j = 1; j <= m; j++){
                    scanf("%d", &s[i][j]);
                    if (s[i][j] == -1){
                        opx = i;
                        opy = j;
                    }
                }
            found = false;
            dfs(opx, opy);
            if(found){
                puts("Ali Win");
                continue;
            }
            p = 0;
            for(int i = 1; i <= n; ++i) {
                if(!arr[i][1]) tarjan(i, 1);
                if(!arr[i][m]) tarjan(i, m);
            }
            for(int i = 2; i < m; ++i){
                if(!arr[1][i]) tarjan(1, i);
                if(!arr[n][i]) tarjan(n, i);
            }
            if(p % 2 == 1) puts("Ali Win");
            else puts("Baba Win");
        }
        return 0;
    }


  • 相关阅读:
    Mantis安装过程笔记
    Python脚本文件中使用中文
    String.trim的作用
    Ivy入门笔记
    Groovy正则表达式复杂逻辑判断实例
    Build a ZenTao Server on Linux
    Ubuntu上安装gevent
    Install Redmine Server with Bitnami Installer
    Semi-automation Script Based on Sleep
    关于MySQL的事务处理及隔离级别
  • 原文地址:https://www.cnblogs.com/pangblog/p/3341808.html
Copyright © 2020-2023  润新知