zoukankan      html  css  js  c++  java
  • codeforces 957B Mystical Mosaic

    题目链接:http://codeforces.com/contest/957/problem/B

    题意:给你一个n*m的字符数组,数组中有‘.’和‘#’两种字符(n,m<=50),题目给定一种操作,是每次可以选择任意行和列,这些行和列的交叉处将会被标记为‘#’,且每行每列在所有操作中只能被选择一次,问能否使用该操作使得初始全为‘.’的数组变成输入这样。可以输出Yes,否则输出No。

    分析:由于题目限制每行每列只能选择一次,因此如果某两行在第j列如果都变成了‘#’,那么他们必然是一起选择,且和j列一起选,那么这两列的‘#’的分布应该完全相同。因此可以直接枚举列号,然后看哪些行在这一列有‘#’,只有所得的这些行完全相同,才输出Yes,否则输出No。

    AC代码:

     1 #include<bits/stdc++.h>
     2 
     3 using namespace std;
     4 
     5 char c[105][105];
     6 int n,m;
     7 int main(){
     8     ios_base::sync_with_stdio(0);
     9     cin.tie(0);
    10     cin>>n>>m;
    11     int num=0;
    12     for(int i=1;i<=n;i++){
    13         for(int j=1;j<=m;j++){
    14             cin>>c[i][j];
    15         }
    16     }
    17     int result=0;
    18     for(int j=1;j<=m;j++){
    19         int p=0;
    20         int now;
    21         if(result==1) break;
    22         for(int i=1;i<=n;i++){
    23             if(result==1) break;
    24             if(c[i][j]=='#'){
    25                 if(p==0){
    26                     now=i;
    27                     p=1;
    28                 }
    29                 else {
    30                     for(int j=1;j<=m;j++){
    31                         if(c[i][j]!=c[now][j]) {result=1;break;}
    32                     }
    33                 }
    34             }
    35         }
    36     }
    37     if(result==0){
    38         cout<<"Yes"<<endl;
    39     }
    40     else cout<<"No"<<endl;
    41 return 0;
    42 }
    View Code
  • 相关阅读:
    人物-IT-张志东:张志东
    人物-IT-任正非:任正非
    人物-IT-张朝阳:张朝阳
    院校-清华大学:清华大学
    人物-丁磊:丁磊
    人物-李彦宏:李彦宏
    人物-IT-马云:马云
    inittab
    initlocation
    initdb
  • 原文地址:https://www.cnblogs.com/ls961006/p/8660429.html
Copyright © 2011-2022 走看看