Codeforces 432E Square Tiling(结构体+贪婪)

Codeforces 432E Square Tiling(结构体+贪婪)

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

题目连接:Codeforces 432E Square Tiling

题目大意:给出一个nm的矩阵,要求对该矩阵进行上色,用大写字母。可是每次上色的区域必须是正方形。不求相邻的上色区域不能有同样的颜色,求字典序最小的方案(字典序比較,从左至右,从上到下)

解题思路:用贪心的思想去构造矩阵。由于字典序的优先级为左至右,以及上到下,所以我们每次对于一个未上色点x。y,考虑最少要放到的长度p就可以。

#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;
const int N = 105;
const int dir[4][2] = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};

int n, m, g[N][N];

void draw(int x, int y, int k, int sign) {
    for (int i = 0; i < k; i++) {
        for (int j = 0; j < k; j++)
            g[x+i][y+j] = sign;
    }
}

int get(int x, int y) {
    int v[15];
    memset(v, 0, sizeof(v));

    for (int i = 0; i < 4; i++) {
        int p = x + dir[i][0];
        int q = y + dir[i][1];
        v[g[p][q]] = 1;
    }

    for (int i = 1; i <= 10; i++)
        if (v[i] == 0)
            return i;
    return 0;
}

void solve (int x, int y) {

    if (y > m) {
        y = 1;
        x++;
    }

    if (x > n)
        return ;

    if (g[x][y]) {
        solve(x, y+1);
        return;
    }

    int sign = get(x, y);

    int p = 1;
    while (true) {
        if (p + x > n || p + y > m)
            break;

        if (g[x][y+p])
            break;
        int tmp = get(x, y+p);

        if (tmp != sign)
            break;
        p++;
    }

    draw(x, y, p, sign);
    solve(x, y + p);
}

int main () {
    scanf("%d%d", &n, &m);
    memset(g, 0, sizeof(g));
    solve (1, 1);

    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++)
            printf("%c", 'A'+g[i][j]-1);
        printf("\n");
    }
    return 0;
}

版权声明:本文博客原创文章。博客,未经同意,不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117480.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • eclipse使用jrebel

    eclipse使用jrebeljrebel 注:以下都是网上收集整理的,可能不全,仅限于学习和研究使用。 JavaRebel是一个工具,主要是用于热加载,比如说在Tomcat之类的应用服务器中,更新了class或者某些资源文件,使用了JRebel之后,就不需要重新启动应用服务器。这里有一点先声明一下,本文只是激活成功教程仅限于学习和研究使用,勿用于其他用途。下载地址:http://www.zeroturnar…

    2022年6月18日
    49
  • CI框架 — URL

    CI框架 — URL

    2021年9月12日
    63
  • java实现深拷贝和浅拷贝_深复制与浅复制的区别

    java实现深拷贝和浅拷贝_深复制与浅复制的区别clone顾名思义就是复制,在Java语言中,clone方法被对象调用,所以会复制对象。所谓的复制对象,首先要分配一个和源对象同样大小的空间,在这个空间中创建一个新的对象。那么在java语言中,有几种方式可以创建对象呢?1.使用new操作符创建一个对象2.使用clone方法复制一个对象那么这两种方式有什么相同和不同呢?new操作符的本意是分配内存。程序执行

    2022年10月1日
    0
  • 订单支付功能对接支付宝支付接口「建议收藏」

    订单支付功能对接支付宝支付接口「建议收藏」求助:这张GIF的效果动图整了一个多小时,没找到好的编辑软件,都太难用了。如果恰巧看到这篇文章有好的GIF编辑或者录制软件,请推荐一个!万谢订单支付功能是购物的最后一个环节,本文将通过对接支付宝的接口,实现支付宝付款功能。蚂蚁金服开放平台专门为开发者的网站,包含了支付宝中涉及的很多功能接口,本文的功能实现是在沙箱环境中进行,蚂蚁沙箱环境(Beta)是协助开发者进行接口功能开发及主要功能联

    2022年5月3日
    157
  • Vue学习之实例生命周期

    Vue学习之实例生命周期Vue学习之实例生命周期

    2022年4月23日
    119
  • MBus协议详解(三)[通俗易懂]

    MBus协议详解(三)[通俗易懂]这节主要集中在MBus协议物理层和数据链路层的硬件实现上,其关键点包括:1、由主到从传输的时候电压的调制;2、由从到主传输的时候电流脉冲的调制;3、总线短路保护。1、由主到从传输的时候电压的调制如上图所示,信号在-27V、0V、+15V上进行调制,采用2个MOS管P201、P202,+15V电压通过稳压器降压到+12V。由主到从传输数据的时…

    2022年10月15日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号