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)
上一篇 2022年1月5日 上午7:00
下一篇 2022年1月5日 上午7:00


相关推荐

  • CSS设置文本超出隐藏显示省略号

    CSS设置文本超出隐藏显示省略号CSS 设置文本超出隐藏显示省略号单行文本多行文本在线试一试单行文本 HTML 代码如下 pclass ellipsis1 title 单行文本 超出隐藏 并且显示省略号 试一试我隐藏啦 单行文本 超出隐藏 并且显示省略号 试一试我隐藏啦 CSS 代码如下 ellipsis1 width 300px white space nowrap overflow hi pclass ellipsis1 title 单行文本 超出隐藏 并且显示省略号 试一试我隐藏啦

    2026年3月18日
    1
  • Unity 3D 入门基础[通俗易懂]

    Unity 3D 入门基础[通俗易懂]1.1菜单栏File(文件):打开和保存场景、项目、以及创建游戏。Edit(编辑):主要用于Unity内部功能、快捷键设置。Assets(资源):用于资源的创建、导入和导出。GameObject(游戏对象):用于游戏对象的创建。Component:(游戏组件):为游戏对象等添加组件来实现部分功能。Window(窗口):显示特定视图。Help(帮助):主要包含使用手册、资源商店、论坛等。1.2五个视图层级视图(Hierarchy):主要存放游戏场景中的具体的游戏对象。场

    2022年8月10日
    20
  • MVC-Chart_WebGrid 显示漂亮chart「建议收藏」

    MVC-Chart_WebGrid 显示漂亮chart「建议收藏」原文:http://www.tuicool.com/articles/maQrYnDemo_Chart_WebGridTwo Part:(1) design a table for test, create a view or procedure and input some records for test.(2) use the view or procedur

    2026年4月15日
    6
  • android十进制RGB转换为十六进制RGB

    android十进制RGB转换为十六进制RGB提供一段简便的代码 将十进制的 RGB 一般我是用截图 ctr alt A 显示的那个 RGB 转换为 android 的 xml 文件中描述颜色的十六进制 记得在前面加上 号

    2026年3月18日
    2
  • oracle修改表名称索引丢失,修改表名索引约束触发器等对象不会失效[通俗易懂]

    oracle修改表名称索引丢失,修改表名索引约束触发器等对象不会失效[通俗易懂]修改表名后,索引、约束、触发器、comment、授权不会失效,这些对象的创建脚本中的表名会正常自动更改修改表名前,索引脚本如下CREATEINDEXCUX.CUX_MSC_RMP_SDCI_DTLS_N2170307ONCUX.CUX_MSC_RMP_SDCI_DTLS(LINE_ID)修改表名后,索引脚本如下CREATEINDEXCUX.CUX_MSC_RMP_SDCI_DTLS_N…

    2022年5月16日
    46
  • ICMP报文分析

    ICMP报文分析

    2021年11月30日
    42

发表回复

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

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