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 (贪心)

Problem A Fill the Square Input: Standard Input Output: Standard Output   In this problem, you have ...
  • u011217342
  • u011217342
  • 2013年12月12日 18:52
  • 816

UVA - 11520 Fill the Square ( 贪心 )

#include #include #include #include #define rep(i, k, n) for (int i = k; i < (n); i++) #define C...
  • mofushaohua_ln
  • mofushaohua_ln
  • 2017年11月12日 13:12
  • 63

UVA 11520 Fill the Square

水题。题目大意:在n*n的网格中填了一些大写字母,你的任务是把剩下的格子也填满大写字母,使得任意两个相邻的格子(即有个公共边的格子)中的字母不同,如果有多重填法,按照要求从上到下,左到右的顺序把所有格...
  • murmured
  • murmured
  • 2013年07月29日 18:22
  • 525

UVA 11520 Fill the Square

第一篇题解 题意:一个n*n的网格里面填了些大写字母,把剩下的也填上,使得相邻的两个网格不相同,并且从左到右,从上到下连起来的字典序最小。 直接对每一个没填的网格依次考虑A到Z是否可以。 ...
  • zhaosdfa
  • zhaosdfa
  • 2013年08月16日 14:21
  • 515

Uva 11520 - Fill the Square

题目链接: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=27&page=show_pro...
  • a1006570862
  • a1006570862
  • 2013年11月23日 12:32
  • 953

UVA 11520 Fill the Square .

题目地址:http://vjudge.net/problem/UVA-11520 从A开始放,看看上下左右,依次顺延 #include using namespace std; #define ...
  • qq_34446253
  • qq_34446253
  • 2016年10月14日 08:22
  • 78

UVa 11520 - Fill the Square

Problem A Fill the Square Input: Standard Input Output: Standard Output   In this problem, you ...
  • u011639256
  • u011639256
  • 2014年04月19日 17:28
  • 308

UVA - 11520 Fill the Square

题意:填写矩阵使得每个位置与周围的都不相等 #include #include #include #include using namespace std; const int MAXN =...
  • u011345136
  • u011345136
  • 2013年11月19日 19:20
  • 850

uva 11520 Fill the Square

题目:Fill the Square思路:贪心。依次从左到右从上到下满足每个格子的字典序最小,最终结果一定是最小的。代码:#include &lt;cstdio&gt; #includ...
  • rabbit_ZAR
  • rabbit_ZAR
  • 2018年02月01日 10:41
  • 43

UVA 11520 Fill the Square

直接枚举每个位置'A' 到'Z'就可以过了. #include #include using namespace std; const int maxn = 11; int n; char gr...
  • zxjcarrot
  • zxjcarrot
  • 2013年05月31日 20:25
  • 302
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UVA - 11520 - Fill the Square(贪心)
举报原因:
原因补充:

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