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

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

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

题目连接:Codeforces 432E Square Tiling

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

解题思路:用贪心的思想去构造矩阵。由于字典序的优先级为左至右,以及上到下,所以我们每次对于一个未上色点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)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • Laravel 出现 No application encryption key has been specified.

    Laravel 出现 No application encryption key has been specified.

    2021年10月20日
  • linux——挖矿程序处理

    linux——挖矿程序处理记一次挖矿程序入侵以及解决实操!1,过程记录系统被挖矿程序入侵,导致系统CPU飙升。kill掉进程后自动重启。无论kill-9还是直接把系统中nanoWatch所对应的进程文件删除,一样会定时重启。使用crontab-e查看当前系统的定时任务信息,如下:显示定时从链接中下载文件,于是在浏览器中访问该地址,下载的文件截图如下:很明显,这是一个恶意脚本,定时检查…

    2022年6月16日
  • oracle sql 字符串拼接_mysql将字符串和数字拼接

    oracle sql 字符串拼接_mysql将字符串和数字拼接一、MySQL在Java中我们通常用加号”+”来实现字符串的拼接,MySQL中也可以使用”+”来实现,比如:先加入测试数据CREATETABLEtest(idINT,nameVARCHAR(10),scoreFLOAT);INSERTINTOtestVALUES(1,’zhang’,98);INSERTINTOtestVALUES(2,’li’,95);Demo1SELECT…

    2022年9月2日
  • 全国职称计算机考试取消了吗,全国职称计算机考试取消必考模块 考生自选[通俗易懂]

    全国职称计算机考试取消了吗,全国职称计算机考试取消必考模块 考生自选[通俗易懂]全国职称计算机考试不再设必考模块,考生可选择自己擅长的模块进行考试。本月起,鞍山专业技术人员计算机应用能力考试系统将进行升级。调整后的题库中共有20个考试模块供考生选择报考。此前,职称计算机考试要设一个必考模块,调整后取消必考项目,考生可自主选择两个模块作为应考模块。据介绍,调整后的20个模块分别为:中文WindowsXP操作系统、Word2003中文字处理、Excel2003中文电子表格、Pow…

    2022年6月2日
  • tomcat闪退原因分析[通俗易懂]

    tomcat闪退原因分析[通俗易懂]tomcat闪退原因分析tomcat闪退原因分析第一种端口被占用第二种jdk不匹配第三种运行环境配置分析tomcat环境变量配置tomcat闪退总结导出与导入导出导入tomcat闪退原因分析在学习javaweb阶段,我们一般使用的是tomcat最为我们的学习服务器,tomcat它是免费且开源的。第一种端口被占用第二种jdk不匹配第三种运行环境配置分析tomcat环境变量配置1、有没有…

    2022年5月30日
  • vue 调用子组件方法失败_Vue子组件调用父组件的方法及常见问题「建议收藏」

    vue 调用子组件方法失败_Vue子组件调用父组件的方法及常见问题「建议收藏」1.子组件内不允许直接修改父组件传过来的参数。错误实例:子组件代码直接对data参数进行修改,则会提示错误。vue.runtime.esm.js?2b0e:619[Vuewarn]:Avoidmutatingapropdirectlysincethevaluewillbeoverwrittenwhenevertheparentcomponentre-render…

    2022年10月2日

发表回复

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

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