CF1059B Forgery

如果纯暴力做的话,最多的格子数有10001000=1e6,每一个格子都有染色和不染色两种,一共要枚举21e6种情况,肯定会T,,

本题的特殊性在于如果对一个格子进行染色操作A,如果染色过后与想要的最终结果不冲突,那么这个操作A一定是对的,就是不存在反悔的问题(就是后面某一个染色操作出现冲突还可能会回溯回来改变操作A让其不染色),所以只需要从上到下对矩阵遍历一遍,对比着目标矩阵看每一个格子是否要染色,最后把两个矩阵对比一遍就行了,复杂度O(nm)

#include<iostream>
#include<cstdio>

using namespace std;

const int N = 1010;

char g[N][N], st[N][N];
int n, m;
int cnt;

int main(){
    scanf("%d%d", &n, &m);
    
    for(int i = 0; i < n; i ++) scanf("%s", g[i]);
    
    for(int i = 0; i < n; i ++)
        for(int j = 0; j < m; j ++)
            st[i][j] = '.';
    

    for(int i = 1; i < n - 1; i ++)
        for(int j = 1; j < m - 1; j ++){
            int flag = 1;
            for(int u = -1; u <= 1; u ++)
                for(int v = -1; v <= 1; v ++){
                    if(u || v)
                        flag &= (g[i + u][j + v] == '#');
                }
            
            if(flag)
                for(int u = -1; u <= 1; u ++)
                    for(int v = -1; v <= 1; v ++)
                        if(u || v) st[i + u][j + v] = '#';
        }
            
        
        for(int i = 0; i < n; i ++)
            for(int j = 0; j < m; j ++)
                if(st[i][j] != g[i][j]){
                    puts("NO");
                    return 0;
                }
                
        puts("YES");
        return 0;
}
posted @   yys_c  阅读(43)  评论(0编辑  收藏  举报
编辑推荐:
· 对象命名为何需要避免'-er'和'-or'后缀
· SQL Server如何跟踪自动统计信息更新?
· AI与.NET技术实操系列:使用Catalyst进行自然语言处理
· 分享一个我遇到过的“量子力学”级别的BUG。
· Linux系列:如何调试 malloc 的底层源码
阅读排行:
· 对象命名为何需要避免'-er'和'-or'后缀
· JDK 24 发布,新特性解读!
· C# 中比较实用的关键字,基础高频面试题!
· .NET 10 Preview 2 增强了 Blazor 和.NET MAUI
· SQL Server如何跟踪自动统计信息更新?
点击右上角即可分享
微信分享提示