UVA - 11520 - Fill the Square(贪心)

原创 2016年08月30日 19:29:24

题意:给定一个n * n(1 <= n <= 10)的网格,有些已经填上了一些大写字母,需要补充完所有的字母,使每两两相邻的格子中的字母不同,且从上至下,从左至右,组成一个字符串后字典序最小。


由于组成字符串后的长度都为n * n,故字典序越往前的字母决定的优先级越大,所以贪心即可,从上到下,从左到右的补充格子里的字母,尽可能的使当前可以补充的字母尽量小。


#include<cstdio>
#include<cstring>
#include<cctype>
#include<cstdlib>
#include<cmath>
#include<iostream>
#include<sstream>
#include<iterator>
#include<algorithm>
#include<string>
#include<vector>
#include<set>
#include<map>
#include<deque>
#include<queue>
#include<stack>
#include<list>
#define fin freopen("in.txt", "r", stdin)
#define fout freopen("out.txt", "w", stdout)
#define pr(x) cout << #x << " : " << x << "   "
#define prln(x) cout << #x << " : " << x << endl
typedef long long ll;
typedef unsigned long long llu;
const int INT_INF = 0x3f3f3f3f;
const int INT_M_INF = 0x7f7f7f7f;
const ll LL_INF = 0x3f3f3f3f3f3f3f3f;
const ll LL_M_INF = 0x7f7f7f7f7f7f7f7f;
const double pi = acos(-1.0);
const double EPS = 1e-6;
const int dx[] = {0, 0, -1, 1};
const int dy[] = {-1, 1, 0, 0};
const ll MOD = 1e9 + 7;
const int MAXN = 10 + 10;
const int MAXT = 10000 + 10;
using namespace std;

int T, n;
char tu[MAXN][MAXN];

int main(){
    int kase = 0;
    scanf("%d", &T);
    while(T--){
        scanf("%d", &n);
        for(int i = 0; i < n; ++i)  scanf("%s", tu[i]);
        for(int i = 0; i < n; ++i)
        for(int j = 0; j < n; ++j){
            if(tu[i][j] != '.')  continue;
            for(char ch = 'A'; ch <= 'Z'; ++ch){
                bool flag = true;
                for(int k = 0; k < 4; ++k)
                    if(i + dx[k] >= 0 && i + dx[k] < n && j + dy[k] >= 0 && j + dy[k] <= n && tu[i + dx[k]][j + dy[k]] == ch){
                        flag = false;
                        break;
                    }
                if(flag){
                    tu[i][j] = ch;
                    break;
                }
            }
        }
        printf("Case %d:\n", ++kase);
        for(int i = 0; i < n; ++i)  printf("%s\n", tu[i]);
    }
    return 0;
}



UVa 11520 Fill the Square (贪心&字典序)

11520 - Fill the Square Time limit: 1.000 seconds http://uva.onlinejudge.org/index.php?option=com_...

uva - 11520 - Fill the Square(贪心、字典序)

题意:在一个n*n的网格中填了一些大写字母,你的任务是把剩下的各自中也填满大写字母,使得任意两个相邻的格子(有公共边)中的字母不同。如果有多种解法,则要求按照从上到下、从左到右的顺序把所有格子连接起来...

uva11520 Fill the Square

贪心
  • sdfzyhx
  • sdfzyhx
  • 2016年11月10日 17:50
  • 322

UVa 11520 - Fill the Square

Problem A Fill the Square Input: Standard Input Output: Standard Output   In this problem, you ...

uva 11520 Fill the Square(枚举)

uva 11520 Fill the Square In this problem, you have to draw a square using uppercase Engl...

UVA 11520 Fill the Square

从上到下从左到右填充可能的最小的字符就行了。 #include #include #include using namespace std; char arr[13][13]; void f...

UVA之Fill the Square

Problem A Fill the Square Input: Standard Input Output: Standard Output   In this problem, you ...

uva 11520

题意:有一个n×n的矩阵,矩阵元素有'.'和大写字母,要求把'.'全部替换为大写字母使每个元素的上下左右的元素和自己不相同,且从左到右从上到下字典序最小,输出矩阵。 题解:n最大10,可以暴力,因为...

UVa11520

Problem: Fill the Square Description: 有一个矩阵,当中的元素是大写字母,但是有个前提,相邻的位置大写字母不能相同,现在这个矩阵中的某些位置已近有字母了,要你把这...

例题1.14 填充正方形 UVa11520

1.题目描述:点击打开链接 2.解题思路:本题要求字典序最小,由于n的范围比较小,直接尝试按照字典序填写每个格子即可。 3.代码: #define _CRT_SECURE_NO_WARNINGS...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UVA - 11520 - Fill the Square(贪心)
举报原因:
原因补充:

(最多只允许输入30个字)