• CF1350E Orac and Game of Life(BFS)


    /*
     * CF1350E
     * 题意:
     * 给出一个n*m的01矩阵,q组询问,称一个方格(i,j)是好的,当且仅当至少有一个
     * 与(i,j)相邻的方格颜色与(i,j)相同,经过一个回合后,好方格的颜色改变而不好的方格颜色不变。
     * 每组询问给出i,j,p,问p回合后方格(i,j)的颜色是什么。
     * 题解;
     * 好方格不会变化,不好的方格会变化,数轮之后好方格也会被染成不好的方格。
     * 因为好方格变为不好是逐层传递的,因此可以bfs出每个方格开始变化的时间,然后根据奇偶性判断最后的状态。
     */
    #include<bits/stdc++.h>
     
    using namespace std;
    const int maxn=1010;
    typedef long long ll;
    int X[4]={1,0,-1,0};
    int Y[4]={0,1,0,-1};
    int a[maxn][maxn];
    int t[maxn][maxn];
    int n,m,qq;
    int main () {
        cin>>n>>m>>qq;
        for (int i=1;i<=n;i++)
            for (int j=1;j<=m;j++) {
                char c;
                cin>>c;
                a[i][j]=c-'0';
            }
        queue<pair<int,int>> q;
        for (int i=1;i<=n;i++)
            for (int j=1;j<=m;j++)
                for (int k=0;k<4;k++) {
                    int tx=i+X[k];
                    int ty=j+Y[k];
                    if (tx<1||tx>n||ty<1||ty>m) continue;
                    if (a[tx][ty]==a[i][j]) {
                        t[i][j]=1;
                        q.push(make_pair(i,j));
                        break;
                    }
                }
        while (!q.empty()) {
            int i=q.front().first;
            int j=q.front().second;
            q.pop();
            for (int k=0;k<4;k++) {
                int tx=i+X[k];
                int ty=j+Y[k];
                if (tx<1||tx>n||ty<1||ty>m) continue;
                if (t[tx][ty]) continue;
                t[tx][ty]=t[i][j]+1;
                q.push(make_pair(tx,ty));
            }
        }
        while (qq--) {
            int i,j;
            ll p;
            cin>>i>>j>>p;
            if (!t[i][j]||p<t[i][j])
                printf("%d
    ",a[i][j]);
            else {
                p=p-t[i][j]+1;
                if (p&1)
                    printf("%d
    ",!a[i][j]);
                else
                    printf("%d
    ",a[i][j]);
            }
        }
    }
  • 相关阅读:
    C# 缓存介绍与演示(转)
    sql server 2005中表的数据与excel互相导入导出的方法
    java.exe,javac.exe,javaw.exe,jar,javadoc 区别
    C# 装箱和拆箱、理论概念(非原创)
    Maven概述(非原创)
    理解java String(非原创)
    JVM JRE JDK区别于联系(非原创)
    LINQ to SQL与LINQ to Entities场景之对照(非原创)
    J2EE系统开发环境配置
    ASP.NET MVC 拦截器(转)
  • 原文地址:https://www.cnblogs.com/zhanglichen/p/12942657.html
Copyright © 2020-2023  润新知