UVA 11520 Fill the Square(模拟)

题目链接:https://vjudge.net/problem/UVA-11520

 

这道题我们发现$n\leq 10$,所以直接进行暴力枚举。

因为根据字典序所以每个位置试一下即可,这样的复杂度不过也就是$O(26\times n^2)$。

 

注意此题中的输入输出有点bug,可以把每一行看成一个字符串进行输入输出(因为其中并没有空格)。

 

AC代码:

 1 #include<cstdio>
 2 #include<iostream>
 3 
 4 using namespace std;
 5 
 6 int n;
 7 char g[15][15];
 8 
 9 int main(){
10     int T;
11     scanf("%d",&T);
12     for(int kase=1;kase<=T;kase++){
13         scanf("%d",&n);
14         for(int i=0;i<n;i++) scanf("%s",g[i]);
15         for(int i=0;i<n;i++){
16             for(int j=0;j<n;j++){
17                 if(g[i][j]=='.'){
18                     for(char k='A';k<='Z';k++){
19                         bool ok=1;
20                         if(i>0&&g[i-1][j]==k) ok=0;
21                         if(j>0&&g[i][j-1]==k) ok=0;
22                         if(i<n-1&&g[i+1][j]==k) ok=0;
23                         if(j<n-1&&g[i][j+1]==k) ok=0;
24                         if(ok){ g[i][j]=k; break;}
25                     }
26                 }
27             }
28         }
29         printf("Case %d:\n",kase);
30         for(int i=0;i<n;i++) printf("%s\n",g[i]);
31     }
32     return 0;
33 }
AC代码

 

posted @ 2020-02-12 22:13  dfydn  阅读(118)  评论(0编辑  收藏  举报