qidao123.com技术社区-IT企服评测·应用市场
标题:
[蓝桥杯]第十一届决赛B组试题解析_试题 历届真题 补给【第十一届】【决赛】【b组】python
[打印本页]
作者:
东湖之滨
时间:
2025-4-19 12:38
标题:
[蓝桥杯]第十一届决赛B组试题解析_试题 历届真题 补给【第十一届】【决赛】【b组】python
标题链接:
https://www.lanqiao.cn/problems/1018/learning/
B 扩散
标题形貌
本题为填空题,只必要算出结果后,在代码中使用输出语句将所填结果输出即可。
小蓝在一张无限大的特殊画布上作画。
这张画布可以看成一个方格图,每个格子可以用一个二维的整数坐标表现。
小蓝在画布上起首点了一下几个点:(0,0),(2020,11),(11,14),(2000,2000)。
只有这几个格子上有黑色,其它位置都是白色的。
每过一分钟,黑色就会扩散一点。详细的,假如一个格子内里是黑色,它就会扩散到上、下、左、右四个相邻的格子中,使得这四个格子也变成黑色(假如原来就是黑色,则还是黑色)。
请问,经过 2020 分钟后,画布上有多少个格子是黑色的。
题解:
在这道题中,我们必要留意 扩散的方向是垂直方向即(上下左右),且每过一分钟就会扩散一个距离,标题要求2020分钟之后,即在单个方向上,扩散的距离为2020,纵然标题上说坐标是无限大的,但是由于条件限制,我们是可以模拟出坐标的:
四个点经过2020分钟的扩散,情况如下
通过上面的扩散情况,我们发现坐标的范围其着实 x轴属于(0-2020,2000+2020) , y轴属于(0-2020,2020+2020)
我们仅仅必要用一个二位数组表现坐标系(未扩散到的地方用0表现,扩散到的地方用1标识),每过一分钟,从四个点的位置处扩散,2020分钟扩散完毕之后,判断二维数组中1的个数即可
代码:
#include<iostream>
#include<queue>
using namespace std;
struct node{
node(int _x,int _y,int _cnt)
:x(_x)
,y(_y)
,cnt(_cnt)
{
}
int x , y , cnt;
//cnt记录本次移动是第几次移动
};
//因为有的编程语言中数组坐标不支持负数,所以我们整体加上2020
int nex[4][2] = {
{1 , 0} , {-1 , 0} , {0 , 1} , {0 , -1}};
const int row=2020+2020+2020+1;
const int col=2000+2020+2020+1;
const int B = 2020;
int map[row][col];
int bfs()
{
queue<node> que;
int cnt = 4; // 初始的黑色的点的个数
//我们需要使用队列来记录我们需要从那个点进行方向移动
que.push(node(0 + B , 0 + B , 0));
que.push(node(2020 + B , 11 + B , 0));
que.push(node(2000 + B , 2000 + B , 0));
que.push(node(11 + B , 14 + B , 0));
map[0 + B][0 + B] = 1;
map[2020 + B][11 + B] = 1;
map[2000 + B][200
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/)
Powered by Discuz! X3.4