首页 > 其他分享 >AT_abc363_e [ABC363E] Sinking Land Solution

AT_abc363_e [ABC363E] Sinking Land Solution

时间:2024-07-25 14:41:03浏览次数:15  
标签:队列 Land int 高度 ABC363E 海平面 abc363 海水 淹没

题目大意:

有一座矩形岛屿,被分为 \(H\times W\) 的网格,四周与海水接触,给定时间 \(Y\) 年,最初海平面位于高度 \(0\ \text{m}\),每年海水上升 \(1\ \text{m}\),请求出每年未被海水淹没的格子数(高度小于等于海水高度即为淹没)。

显然有点类似于广搜的想法,用一个队列存储与海水接触的方块,如果当前方块高度小于等于海平面,那么此处标记为淹没,然后把四周未被淹没的方块加入队列,但是因为是队列,所以枚举队列中高度低于海平面的元素是 \(O(n)\) 的,所以使用小根堆,即优先队列,每次取出其中最小的元素,如果这个元素高度已经大于了海平面,那么就退出,可以下一年了。

由于每个元素只会进队一次,出队一次,所以时间复杂度大约是 \(O(n\log n)\) 的。

#include <bits/stdc++.h>
using namespace std;
const int N = 1e3 + 10;
int H, W, Q, A[N][N];
bool vis[N][N];
priority_queue<pair<int, pair<int, int> > > pq;
int dx[4] = {0, 1, 0, -1};
int dy[4] = {1, 0, -1, 0};
int main() {
	ios :: sync_with_stdio(0); cin.tie(0); cout.tie(0);
	cin >> H >> W >> Q;
	for (int i = 1; i <= H; i ++) {
		for (int j = 1; j <= W; j ++) {
			cin >> A[i][j];
			if (i == 1 || i == H || j == 1 || j == W) {
				pq.push(make_pair(-A[i][j], make_pair(i, j)));
				vis[i][j] = 1;
			}
		}
	}
	int Ans = H * W;
	for (int k = 1; k <= Q; k ++) {
		while (!pq.empty() && -pq.top().first <= k) {
			Ans --; int x = pq.top().second.first, y = pq.top().second.second;
			pq.pop();
			for (int i = 0; i < 4; i ++) {
				int nxtx = x + dx[i], nxty = y + dy[i];
				if (nxtx >= 1 && nxtx <= H && nxty >= 1 && nxty <= W && !vis[nxtx][nxty])
					pq.push(make_pair(-A[nxtx][nxty], make_pair(nxtx, nxty))), vis[nxtx][nxty] = 1;
			}
		}
		cout << Ans << "\n";
	}
	return 0;
}

标签:队列,Land,int,高度,ABC363E,海平面,abc363,海水,淹没
From: https://www.cnblogs.com/LaDeX-Blog/p/18323025/AtCoder_ABC363E_Sinking_Land_Solution

相关文章

  • 如何使用face_recognition库中的face_landmarks
    face_recognition库有face_recognition.face_landmarks()这会在列表中返回许多字典,每个字典都包含像top_lipsright_eye等地标和许多元组。谁能解释一下这些元组是什么,以及我如何使用它们?[{'chin':[(294,215),(295,230),(297,244),(300,258),(304,271),......
  • ABC363 DEF 题解
    ABC363DEF题解前情提要:赛时过了ABCE。D-PalindromicNumber题目链接其实赛时已经看出了一些性质,但没想完做法,赛后看题解才发现这么简单/fn首先,为了方便,我们不把\(0\)视作回文数(因此需要特判一下\(n=1\)的情况)。下面要证明:\(d\)位回文数有\(10^{\left\lfloor\f......
  • CF140E New Year Garland
    题意有\(m\)种小球,用这些小球装饰一棵\(n\)层的圣诞树,每层需要放置\(a_i\)个小球。在每一层中,相邻球颜色不同,且相邻两层球颜色集合不同,求装饰圣诞树的方案数,答案对\(p\)取模。\(1\len,m\le10^6,2\lep\le10^9,1\lea_i\le5000,\sum_{i=1}^na_i\le10^7\qquad\tex......
  • ABC 363 E - Sinking Land 题解
    用一个优先队列维护和海相邻的位置,每次海面上升就判断一下队列中海拔最低的那个位置会不会被淹没,如果会,就删除,同时它上下左右的位置也是和海相邻的(或者就在海里),把它们加进优先队列里,记得判断一下加入的格子曾经有没有被加入过队列,不要加重复了。点击开DconstintN=1099;int......
  • GoLand 2024 for Mac GO语言集成开发工具环境
    Mac分享吧文章目录效果一、下载软件二、开始安装1、双击运行软件(适合自己的M芯片版或Intel芯片版),将其从左侧拖入右侧文件夹中,等待安装完毕2、应用程序显示软件图标,表示安装成功3、打开访达,点击【文稿】。将安装包内的【ja-netfilter】文件夹拖到文稿中4、填写内容,修改用......
  • joi2022_yo2_c 国土分割 (Land Division) 题解
    国土分割(LandDivision)推销我的洛谷博客。题意给定一个\(n\timesm\)的矩阵\(a\),你需要选择在横向或纵向分割至少一次,使得每个分割出来的小矩阵的\(a_{i,j}\)之和相等。数据范围\(1\leqslantn,m\leqslant50\)。\(1\leqslanta_{i,j}\leqslant10^5\)。思......
  • Land survey boundary report (template)
    Landsurveyboundaryreport(template) 土地勘测定界报告(模板).doc......
  • 解决Landsat 5 TM L2影像在ENVI中打不开的情况
    打开Landsat5TML2影像的MTL文件在ENVI中报错如下:解决方法:打开MTL文件更改两个地方:1.将第一行改为:GROUP=L1_METADATA_FILE;2.L2级的影像已经过校正处理,正确的应该是如下图所示*****_SR_B*.TIF,但是在MTL里面往下拉还有一处地方的各波段名称没有更改过来,将下图红色框内......
  • GEE APP:根据大地遥感Landsat卫星 5 号、7 号和 8 号估算河流排放量
    摘要河流排量卫星遥感(RSQ)算法为补充河流测量记录提供了有用的观测数据源。RSQ算法已经存在了十多年,但由于缺乏可操作性和对不确定性的定量描述,其广泛使用一直受到阻碍。在此,我们介绍一种利用大地遥感卫星观测数据近实时估算河流排放量的算法RODEO。RODEO已通过456个测站(......
  • GEE案例:Landsat系列影像遥感水覆盖评估的简单填云方法
    简介在很多时候我们进行长时序的水域面积评估的时候,会发现当期影像或者多期影像会无法覆盖所选研究区域,或者因为云层较多,使得影像无法准确获取地表信息。因此我们如何解决这种问题就成为一个值得关注的问题,因此我们参考2021年的一篇文章给大家一个影像修复的方法。摘要水文......