构造+贪心,CF 432E,Square Tiling

一、题目

1、题目描述

2、输入输出

2.1输入

2.2输出

3、原题链接

Problem - 432E - Codeforces


二、解题报告

1、思路分析

很简单的一个构造题

考虑字典序从左到右从上到下,所以我们正常遍历

对于当前格子如果空闲,那么找到一个能填的最小字符

然后检查该格子可扩展的最大边长为多少

然后将正方形填字符即可

2、复杂度

时间复杂度: O((MN)^2)空间复杂度:O(MN)

3、代码详解

 ​
#include <bits/stdc++.h>

using i64 = long long;

void solve() {
    int n, m;
    std::cin >> n >> m;
    std::vector<std::vector<int>> g(n, std::vector<int>(m));
    
    std::array<int, 5> dir { 1, 0, -1, 0, 1 };

    auto check = [&](int i, int j) -> int {
        if (g[i][j]) return g[i][j];
        for (int c = 1; c <= 26; ++ c) {
            bool f = true;
            for (int k = 0; k < 4; ++ k) {
                int ii = i + dir[k], jj = j + dir[k + 1];
                if (ii < 0 || ii >= n || jj < 0 || jj >= m) continue;
                if (g[ii][jj] == c) f = false;
            }
            if (f) return c;
        }

        return 0;
    };

    for (int i = 0; i < n; ++ i) {
        for (int j = 0; j < m; ++ j) {
            if (g[i][j]) continue;
            int c = check(i, j);
            int sz = 0;
            while (j + sz < m && i + sz < n && check(i, j + sz) == c) 
                ++ sz;
            -- sz;
            for (int ii = i; ii <= i + sz; ++ ii)
                for (int jj = j; jj <= j + sz; ++ jj)
                    g[ii][jj] = c;
        }
    }

    for (int i = 0; i < n; ++ i, std::cout << '\n') 
        for (int j = 0; j < m; ++ j)
            std::cout << char(g[i][j] - 1 + 'A');
}

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    std::cout.tie(nullptr);
    int _ = 1;
    // std::cin >> _;
    while (_ --)
        solve();
    return 0;
}

相关推荐

  1. CF1898B Milena and Admirer(贪心

    2024-07-14 05:14:02       59 阅读
  2. 构造数字(贪心算法)

    2024-07-14 05:14:02       45 阅读
  3. 力扣:435. 无重叠区间(贪心

    2024-07-14 05:14:02       51 阅读
  4. 【LeetCode-435】无重叠区间(贪心)

    2024-07-14 05:14:02       56 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-14 05:14:02       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-14 05:14:02       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-14 05:14:02       57 阅读
  4. Python语言-面向对象

    2024-07-14 05:14:02       68 阅读

热门阅读

  1. 使用openssl生成自签名证书

    2024-07-14 05:14:02       26 阅读
  2. 【TS】如何使用联合类型和交叉类型

    2024-07-14 05:14:02       26 阅读
  3. C语言——printf、scanf、其他输入输出函数

    2024-07-14 05:14:02       26 阅读
  4. C语言实现数据结构B树

    2024-07-14 05:14:02       26 阅读
  5. 前端热门面试题二

    2024-07-14 05:14:02       25 阅读
  6. 使用 git 和 GitHub 互动

    2024-07-14 05:14:02       21 阅读
  7. MySQL入门学习-深入索引.匹配顺序

    2024-07-14 05:14:02       23 阅读
  8. C#—Json序列化和反序列化

    2024-07-14 05:14:02       20 阅读
  9. 探索 `DatagramSocket` 类

    2024-07-14 05:14:02       31 阅读
  10. 5. 最长回文子串

    2024-07-14 05:14:02       24 阅读
  11. SQLServer设置端口

    2024-07-14 05:14:02       22 阅读
  12. webpack terser-webpack-plugin 不打包注释及log

    2024-07-14 05:14:02       25 阅读