zoukankan      html  css  js  c++  java
  • CF1059B Forgery

    如果纯暴力做的话,最多的格子数有(1000*1000=1e6),每一个格子都有染色和不染色两种,一共要枚举(2^{1e6})种情况,肯定会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;
    }
    
  • 相关阅读:
    【BZOJ 2565】 最长双回文串
    【BZOJ 2160】 拉拉队排练
    【POI 2010】 Antisymmetry
    【HDU 3068】 最长回文
    【POJ 3974】 Palindrome
    【POJ 2503】 Babelfish
    【POJ 3349】 Snowflake Snow Snowflakes
    【BZOJ 2457】 双端队列
    根文件系统的构建与分析(一)之流程分析
    Linux MTD系统剖析
  • 原文地址:https://www.cnblogs.com/tomori/p/15029713.html
Copyright © 2011-2022 走看看