蓝桥杯C/C++百校真题赛(3期)Day5(染色时间)

前言

本来想等讲评完把第二题补了一起发,结果昨天讲评的一言难尽,只好只发第一题。

Q1 染色时间

问题描述

小蓝有一个 n n n m m m 列的白色棋盘, 棋盘的每一个方格都可以被染成彩色。

每个方格有一个染色时间 t i j t_{i j} tij, 不同方格的染色时间可能不同。如果一个方 格被触发了染色, 这个方格就会在 t i j t_{i j} tij 秒之后变成彩色, 然后将自己上下左右四 个方向相邻的方格触发染色。每个方格只能被触发染色一次, 第一次触发之后 的触发为无效触发。

给定每个方格的染色时间, 在时刻 0 触发第一行第一列的方格染色, 请问 多长时间后整个棋盘完成染色。

输入格式

输入的第一行包含两个整数 n , m n, m n,m, 分别表示棋盘的行数和列数。

接下来 n n n 行, 每行 m m m 个正整数, 相邻的整数之间用一个空格分隔, 表示每 个方格的染色时间。该部分的第 i i i 行第 j j j 个整数表示 t i j t_{i j} tij, 即第 i i i 行第 j j j 列的方 格的染色时间。

输出格式

输出一行包含一个整数, 表示整个棋盘完成染色的时间。

分析:主要是要知道优先队列可以跑这种有要求特定搜索顺序的bfs这个tip,其他的就是一个普通的bfs,拓宽眼界用的一个题。

/*
* @Author: gorsonpy
* @Date:   2023-01-17 12:57:35
* @Last Modified by:   gorsonpy
* @Last Modified time: 2023-01-18 13:37:08
*/
#include<iostream>
#include<queue>
using namespace std;

using PII = pair<int, int>;
using PIII = pair<int, PII>;
const int N = 510;

int t[N][N], n, m;
bool st[N][N];

#define x first
#define y second

int ans;
int bfs()
{
	int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
	priority_queue<PIII, vector<PIII>, greater<PIII> > q;
	q.push({t[0][0], {0, 0}});
	st[0][0] = true;
	while(q.size())
	{
		auto r = q.top();
		q.pop();

		int timestamp = r.x;
		PII pos = r.y;

		ans = max(ans, timestamp);
		for(int i = 0; i < 4; ++i)
		{
			int nx = pos.x + dx[i], ny = pos.y + dy[i];
			if(nx < 0 || nx >= n || ny < 0 || ny >= m) continue;
			if(!st[nx][ny])
			{
				q.push({timestamp + t[nx][ny], {nx, ny}});
				st[nx][ny] = true;
			}
		}
	}
	return ans;
}
int main()
{
	cin >> n >> m;
	for(int i = 0; i < n; ++i)
		for(int j = 0; j < m; ++j)
			cin >> t[i][j];

	cout << bfs() << endl;
	return 0;
}
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
2023年的第十四届蓝桥杯 C/C++ 大学生大 A 组省一个非常重要且具有挑战性的比。作为蓝桥杯事的一部分,这个比吸引了全国各地的大学生参与,旨在促进青年学生计算机编程技术的提高,培养他们的创新能力和团队协作精神。 参者需要通过线上报名,在规定的时间内上传自己的比作品。比设置了一系难度逐渐增加的编程题目,要求选手运用C/C++语言进编写和实现。这些题目可能涉及算法设计、数据结构、编程基础等方面的知识,考察参者的编码能力、解决问题的能力以及在压力下的应变能力。 在比中,选手不仅需要具备扎实的编程技术,还需要在有限的时间内迅速分析问题、设计解决方案,并通过编程实现。因此,参者需要具备良好的逻辑思维能力、数学基础和编程实践经验。 在省中取得好成绩的选手将有机会晋级到全国,进一步与全国各地的顶尖选手一较高下,争夺更好的名次和更多的奖品。 参加蓝桥杯 C/C++ 大学生大不仅是一次锻炼和展示自己编程能力的机会,还能结识更多志同道合的同学和业界精英,获得丰厚的奖金和荣誉。同时,参经历对于大学生未来的学习和职业发展也具有积极的影响。 总之,2023年第十四届蓝桥杯 C/C++ 大学生大 A 组省一个具有挑战性的比,参者需要具备扎实的编程技术和解决问题的能力。通过参与比,学生可以提升自己的编程能力,拓宽视野,展示个人才华,并为未来的学习和就业打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

102101141高孙炜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值