• sdust 2410 Mine Number


    今天看了3个这种题了  枚举第一行即可

      1 #include<cstdio>
      2 #include<cstring>
      3 #include<iostream>
      4 #include<algorithm>
      5 #include<cmath>
      6 #include<queue>
      7 #include<stack>
      8 #include<vector>
      9 #include<map>
     10 #include<string>
     11 #define maxn
     12 #define INF
     13 using namespace std;
     14 typedef long long LL;
     15 int n,m,flag;
     16 
     17 int num1[21][21],num2[21][21];
     18 int get_sum(int i,int j)
     19 {
     20     int tem=num2[i][j];
     21     if(i>0)
     22         tem+=num2[i-1][j];
     23     if(j<m-1)
     24         tem+=num2[i][j+1];
     25     if(j>0)
     26         tem+=num2[i][j-1];
     27     return tem;
     28 }
     29 int check(int x)
     30 {
     31     int ans=num2[0][x];
     32     if (x)
     33         ans+=num2[0][x-1];
     34     if (x<m-1)
     35         ans+=num2[0][x+1];
     36     if (ans==num1[0][x] || ans+1==num1[0][x])
     37         return true;
     38     return false;
     39 }
     40 int  puan(int s)
     41 {
     42     for(int j=0;j<m;j++)
     43     {
     44         if((s&(1<<j)))
     45             num2[0][j]=1;
     46         else
     47             num2[0][j]=0;
     48     }
     49     if(n==1)
     50     {
     51         for(int i=0;i<m;i++)
     52             if(get_sum(0,i)!=num1[0][i])
     53               return 0;
     54         return 1;
     55     }
     56     for(int i=0;i<m;i++)
     57     {
     58         if(!check(i))
     59             return 0;
     60     }
     61     for(int i=1;i<n;i++)
     62         for(int j=0;j<m;j++)
     63     {
     64         if(get_sum(i-1,j)==num1[i-1][j])
     65             num2[i][j]=0;
     66         else if(get_sum(i-1,j)+1==num1[i-1][j])
     67           num2[i][j]=1;
     68         else
     69             return 0;
     70 
     71     }
     72     for(int i=0;i<m;i++)
     73         if(get_sum(n-1,i)!=num1[n-1][i])
     74           return 0;
     75     return 1;
     76 }
     77 int main()
     78 {
     79 
     80     char str[30];
     81     int t;
     82     while(scanf("%d",&t)!=EOF)
     83     {
     84         for(int ii=1; ii<=t; ii++)
     85         {
     86             scanf("%d%d",&n,&m);
     87             for(int i=0; i<n; i++)
     88             {
     89                 scanf("%s",str);
     90                 for(int j=0; j<m; j++)
     91                     num1[i][j]=str[j]-'0';
     92             }
     93 
     94             for(int i=0; i<(1<<m); i++)
     95             {
     96                 if(puan(i))
     97                   break;
     98             }
     99             printf("Case %d:
    ",ii);
    100             for(int i=0; i<n; i++)
    101             {
    102                 for(int j=0; j<m; j++)
    103                 {
    104                     if(num2[i][j])
    105                         printf("*");
    106                     else
    107                         printf(".");
    108                 }
    109                 printf("
    ");
    110             }
    111         }
    112     }
    113 
    114     return 0;
    115 }
  • 相关阅读:
    2021.12.10
    2021.12.6
    12月3日
    《大话软件工程需求分析与软件设计》阅读笔记
    《大话软件工程需求分析与软件设计》阅读笔记
    期末加分申请
    2021.12.8
    2021.12.4
    <20211230>主板故障: Win10休眠后黑屏假死,无法回到桌面
    <20211130>怪异的主板故障开机黑屏,不显示, 黄绿灯频闪故障
  • 原文地址:https://www.cnblogs.com/tsw123/p/4424979.html
Copyright © 2020-2023  润新知