• 【推导】Codeforces Round #472 (rated, Div. 2, based on VK Cup 2018 Round 2) B. Mystical Mosaic


    题意:给你一个棋盘的最终局面。

    你的一次操作可以选择一些行和列,将它们的交叉点染黑,不能重复选择某行或者某列。问你是否能经过数次操作之后,达到目标局面。

    就枚举所有黑点,如果该点行列都没被标记,就给它的行列新建一次操作的序号;否则如果只有行有操作标号,就把它付给列操作标号;对列亦然。

    然后模拟一遍,看看结果是否和题目所给相同。

    #include<cstdio>
    #include<cstdlib>
    using namespace std;
    int n,m,num;
    char a[55][55];
    int b[55],c[55];
    char d[55][55];
    int main(){
    	//freopen("b.in","r",stdin);
    	scanf("%d%d",&n,&m);
    	for(int i=1;i<=n;++i){
    		scanf("%s",a[i]+1);
    	}
    	for(int i=1;i<=n;++i){
    		for(int j=1;j<=m;++j){
    			if(a[i][j]=='#'){
    				if(!b[i] && !c[j]){
    					b[i]=c[j]=++num;
    				}
    				else if(!b[i] && c[j]){
    					b[i]=c[j];
    				}
    				else if(b[i] && !c[j]){
    					c[j]=b[i];
    				}
    			}
    		}
    	}
    	for(int i=1;i<=n;++i){
    		for(int j=1;j<=m;++j){
    			d[i][j]='.';
    		}
    	}
    	for(int k=1;k<=num;++k){
    		for(int i=1;i<=n;++i){
    			for(int j=1;j<=m;++j){
    				if(b[i]==c[j] && b[i]==k){
    					d[i][j]='#';
    				}
    			}
    		}
    	}
    	for(int i=1;i<=n;++i){
    		for(int j=1;j<=m;++j){
    			if(a[i][j]!=d[i][j]){
    				puts("No");
    				return 0;
    			}
    		}
    	}
    	puts("Yes");
    	return 0;
    }
  • 相关阅读:
    ListView 操作
    Delphi 浏览器WebBrowser
    XE6 c++builder Edit垂直居中
    HTML 表格标签
    HTML 标签说明
    Ubuntu下如何解压缩zip,tar,tar.gz,tar.bz2文件
    Ubuntu 12.04下mysql的安装与配置
    Ubuntu12.04下apache服务器的安装也配置
    Ubuntu12.04下tomcat的安装与配置
    Ubuntu 12.04下jdk的安装与配置
  • 原文地址:https://www.cnblogs.com/autsky-jadek/p/8642582.html
Copyright © 2020-2023  润新知