HJ172 小红的矩阵染色

  • 题目
  • 题解(23)
  • 讨论(6)
  • 排行

简单 通过率:31.75% 时间限制:1秒 空间限制:256M

知识点贪心

校招时部分企业笔试将禁止编程题跳出页面,为提前适应,练习时请使用在线自测,而非本地IDE。

描述

给定一个 n×mn×m 的矩阵,初始时部分格子已被染成黑色 (用 ``**`` 表示),其余格子为空白(用 ``oo`` 表示)。

小红最多可以任选至多 kk 个空白 格子,将其染成红色 。计分规则如下:

∙ ∙ 若某个红色格子的正下方 (同一列下一行)也是红色,则该格子贡献 11 分;

∙ ∙ 其他情况不计分。

请你帮小红计算,经过最优染色后,最多能获得多少分数。

输入描述:

第一行输入三个整数 n,m,k(1≦n,m≦103; 1≦k≦n×m)n,m,k(1≦n,m≦103; 1≦k≦n×m),分别表示矩阵行数、列数及最多可染红的格子数量。

此后 nn 行,每行输入一个长度为 mm 的字符串 sisi​,描述第 ii 行初始状态:

∙ ∙ ``**`` 代表黑色格子,不能重新染色;

∙ ∙ ``oo`` 代表空白格子,可选择染为红色。

输出描述:

输出一个整数,表示小红通过最佳策略能够获得的最大分数。

示例1

输入:

复制代码
4 4 3
*o*o
oooo
****
oooo

复制输出:

复制代码
1

复制说明:

复制代码
一种可行方案如下(``rr`` 为染成红色后的格子):

*r*o
oroo
****
oooo

红色格子共有 22 个,其中正下方同列的红色对数为 11,因此得分 11。

示例2

输入:

复制代码
3 3 3
*o*
*o*
*o*

复制输出:

复制代码
2
cpp 复制代码
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <functional>

using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL);

    int n, m;
    long long k;
    cin >> n >> m >> k;

    vector<string> matrix(n);
    for (int i = 0; i < n; ++i) {
        cin >> matrix[i];
    }

    vector<int> chain_lengths;
    for (int j = 0; j < m; ++j) {
        int consecutive_white = 0;
        for (int i = 0; i < n; ++i) {
            if (matrix[i][j] == 'o') {
                consecutive_white++;
            } else {
                if (consecutive_white > 0) {
                    chain_lengths.push_back(consecutive_white);
                }
                consecutive_white = 0;
            }
        }
        if (consecutive_white > 0) {
            chain_lengths.push_back(consecutive_white);
        }
    }

    sort(chain_lengths.begin(), chain_lengths.end(), greater<int>());

    long long score = 0;
    for (int len : chain_lengths) {
        if (k <= 0) break;
        long long to_color = min((long long)len, k);
        k -= to_color;
        if (to_color > 1) {
            score += to_color - 1;
        }
    }

    cout << score << endl;

    return 0;
}
相关推荐
骑着蜗牛撵大象3272 分钟前
558 万美元训出 671B 模型:DeepSeek-V3 算法与系统的协同拆解
分布式·算法·moe·deepseek-v3·mla·fp8训练
Eyfcom4 分钟前
〖阶段性回顾〗物流系统架构与算法的 Day 1-5 知识图谱与实战答疑
算法·系统架构·知识图谱·物流管理系统·快递管理系统
xunberg9 分钟前
【Agent 生产化手记-02】Agent 怎么向人提问
人工智能·算法·架构
海绵宝宝转agent15 分钟前
Leetcode二叉树算法个人理解
笔记·学习·算法·leetcode·深度优先
pjj1985439 分钟前
YOLO 目标检测算法系列梳理:从 V1 到 V5 的原理演进
算法·yolo·目标检测
kiracrimson1 小时前
STL:List的使用和模拟实现
开发语言·c++·list
二十七日秋1 小时前
算法刷题笔记「Day 1|四道 OJ 入门题里的深坑」
c语言·汇编·数据结构·c++·笔记·python·算法
晚风叙码1 小时前
Linux 进程概念(下):程序地址空间与虚拟内存
linux·服务器·算法
流年如夢1 小时前
继承与多态_继承篇
c++·继承·面向对象·c++进阶
silvamux_2 小时前
微头条爆款体平台适配实测:把交付要求变成可计算的指标
java·线性代数·算法·决策树·矩阵