E-海啸-牛客竞赛

[牛客竞赛] 海啸(思维) 链接:https://ac.nowcoder.com/acm/contest/332/E 来源:牛客网 题目描述 有一个沿海地区,可以看作有n行m列的城市,第i行第j列的城市海拔为h[i][j]。 由于沿海,所以这个地区经常会发生海啸。 海啸发生时,部分城市会被淹没,具体来说,海水高度会达到d,因此海拔低于d的城市都会被淹没。 现在有q次询问,每次问你一个矩形区域中,有多少城市不会被淹没。 输... 阅读详情

 

E - 海啸 - 牛客竞赛



时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
 

题目描述

有一个沿海地区,可以看作有n行m列的城市,第i行第j列的城市海拔为h[i][j]。
由于沿海,所以这个地区经常会发生海啸。
海啸发生时,部分城市会被淹没,具体来说,海水高度会达到d,因此海拔低于d的城市都会被淹没。
现在有q次询问,每次问你一个矩形区域中,有多少城市不会被淹没。

输入描述:

第一行三个整数n,m,d,具体含义见题目描述。
接下来n行,每行m个整数,其中第i行第j列的整数为h[i][j],具体含义见题目描述。
第n+2行一个整数q,表示询问数。
接下来q行,每行四个整数a,b,x,y,
表示询问从第a行第b列到第x行第y列的矩形地区中,有多少地区不会被淹没。
即有多少个i,j,满足 a≤i≤x,b≤j≤ya≤i≤x,b≤j≤y ,且 h[i][j]≥dh[i][j]≥d 。

输出描述:

共q行,第i行一个整数,表示第i个询问的答案。

示例1

输入

3 3 3
1 2 3
2 1 5
4 3 2
2
1 2 2 3
2 1 3 3

输出

2
3

备注:

1≤n×m≤10^6
1≤q≤10^5
0≤d,h[i][j]≤10^9
1≤a≤x≤n,1≤b≤y≤m

 

分析:

笔者刚看到题,海平面,城市,淹没等等字眼第一反应搜索,读完题面,发现不需要搜索因为题目中城市(点集)之间没有连通关系,城市之间是不相关的。

接下来下意识的觉得,哇,连搜索都不用,那不是好简单,看来这题是模拟题意。

顺着思路于是开始着手写代码,这个时候问题出现了行列范围是1≤n×m≤10^6,这个数组怎么开?如果直接开二维数组h[1000001][1000001]是不合理的,这个数组一共有10^6*10^6=10^12数量级的元素,空间爆掉了。那么这里说三种方法

1、官方给出的方法是定义一个**h二维指针数组,读取m,n后new重定义数组大小。

2、使用C++STL库封装的vector动态数组。

3、因为行*列<=10^6,可以用一个一维数组h[1000001],通过下标对n列的整除性实现降维。即每个h[i]相当于二维数组的s[i/n][i%n]。

数组考虑完了,下面开始模拟题意。

这时又有新的问题了,直接遍历是不可行的,如果每次询问都进行遍历那么操作次数是q*(x-a)*(y-b)在本题的数据规模下,时间复杂度太高了,会超出时间限制。那么需要进行预处理,使用前缀和的思想。用数组pre[x][y]的值表示,存放从1,1到x,y这个矩形内的不会被淹没的城市数,则矩形x1y1x2y2内的不会被淹没的城市数量可表示为 pre[x2][y2] - pre[x2][y1-1] - pre[x1-1][y2] + pre[x1-1][y1-1]。

(求pre[x][y]的值if(x >= d)pre[i][j] = 1 + pre[i-1][j] + pre[i][j-1] - pre[i-1][j-1];
       else pre[i][j] = pre[i-1][j] + pre[i][j-1] - pre[i-1][j-1];

就是反向使用上面的前缀和思路,即累加的思想

)

下面几种代码供大家参考

数组降维

//数组降维
#include<bits/stdc++.h>
using namespace std; 
int h[1000005],s[1000005];
int main(){
	int m,n,d,q,a,b,x,y,t,t1,t2,t3;
	scanf("%d%d%d",&m,&n,&d);
	for(int i=0;i<m*n;i++){
		scanf("%d",&h[i]);
	}
	t=0;
	for(int i=0;i<n;i++){
		if(h[i]>=d)t++;
		s[i]=t;
	}
	t=0;
	for(int i=0;i<m;i++){
		if(h[i*n]>=d)t++;
		s[i*n]=t;
	}	
	for(int i=1;i<m;i++){
		for(int j=1;j<n;j++){
			t=0;
			if(h[i*n+j]>=d)t=1;
			s[i*n+j]=t+s[(i-1)*n+j]+s[i*n+j-1]-s[(i-1)*n+j-1];
		}
	}
	scanf("%d",&q);
	for(int i=1;i<=q;i++){
		scanf("%d%d%d%d",&a,&b,&x,&y);
		t=0;
		t=s[(x-1)*n+(y-1)];
		t3=s[(a-2)*n+(b-2)];
		if(a<2)t1=t3=0;else t1=s[(a-2)*n+(y-1)];
		if(b<2)t2=t3=0;else t2=s[(x-1)*n+(b-2)];		
		t=t-t2-t1+t3;	
		printf("%d\n",t);
	}
	return 0;
}

 

动态数组 

//动态数组
#include<iostream>
#include<vector>
#include<cstdio>
using namespace std;
vector<vector<int> > e;
int n,m;
int main()
{
    int d;
    scanf("%d%d%d",&n,&m,&d);
    e=vector<vector<int> >(n+1,vector<int>(m+1));
    for(int i=1,recv;i<=n;++i)
        for(int j=1;j<=m;++j)
        {
            scanf("%d",&recv);
            e[i][j]=(recv>=d?1:0)+e[i-1][j]+e[i][j-1]-e[i-1][j-1];
        }
    int q;
    scanf("%d",&q);
    for(int a,b,c,d;q--;)
    {
        scanf("%d%d%d%d",&a,&b,&c,&d);
        printf("%d\n",e[c][d]-e[a-1][d]-e[c][b-1]+e[a-1][b-1]);
    }
    return 0;
}

 

第3版•系统集成项目管理工程师(中级) │ 第12章 执行过程组 ✦ 管理沟通 🥏第3版•系统集成项目管理工程师(中级) │ 第12章 执行过程组 ✦ 管理沟通 阅读详情

相关推荐

Vue 实现华视身份证读卡器功能

在www.downcc.com下载“华视cvr100驱动”安装程序; 华视电子官网有相应的文档说明和程序下载 一、服务安装 选择安装目录: 启动读卡服务: 安装成功会有如图所示: 注意事项: 安装开发包必须使用管理员权限,因为windows服务和读卡器设备驱动程序均需要管理员权限,否则会安装失败。 win10需要修改组策略才有管理员权限。 二、服务的使用 打开浏览器,输入地址http://127.0.0.1:19196/mainpage,回车 点击openDevice: 点.

zyqgt960812的博客 6501

2022年江西理工大学软件工程学院程序设计竞赛C++题解

题解A题B题C题D题E题F题G题H题I题J题K题题外话 A题 题目链接 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 对于大部分编程语言来说,编写一个能够输出 “Hello World!” 的程序往往是最基本、最简单的。 因此,这个程序常常作为一个初学者接触一门新的编程语言所写的第一个程序,也经常用来测试开发、编译环境是否能够正常工作。 陈末也为大家准备了这么一道题,现在你就可以通过写一个输

m0_60687382的博客 3100

告别硬编码!用Aviator 5.3.3实现动态规则引擎,Spring Boot项目实战教程

本文详细介绍了如何使用Aviator 5.3.3在Spring Boot项目中实现动态规则引擎,告别硬编码。通过Maven依赖集成、规则模型设计、规则执行引擎实现及电商促销系统实战案例,展示了Aviator在动态规则配置中的高效应用,提升业务灵活性和开发效率。

weixin_30329623的博客 446

A. k-th divisor-就问你敢开多大的数组

题目链接 Educational Codeforces Round 17 A. k-th divisor 题意,输入两个数n,k,问n的第k个除数是否存在,不存在输出-1,存在输出这个除数,4的除数依次是1,2,4, (1 ≤ n ≤ 10的15次方, 1 ≤ k ≤ 10的9次方). 判断到根号n就可以了,由对称知道个数为cnt*2 或者 cnt*2-1 (n是完全平方数)

永远保持谦卑好学 721

INMP441麦克风与ESP32的I2S音频采集实战指南

本文提供了INMP441数字麦克风与ESP32开发板通过I2S接口进行高质量音频采集的完整实战指南。详细讲解了硬件连接、软件配置、数据读取及基础处理,并分享了常见的避坑技巧与性能优化建议,帮助开发者快速构建物联网音频应用。

weixin_28396629的博客 598

特征提取神操作,登上Nature!计算速度狂提300%!

登上Nature!作者提出CVOCA,一种能同时处理数据的幅度和相位信息的卷积模型,在性能远超SOTA的同时,计算速度更是狂飙300%!实际上,作为机器学习和深度学习的核心技术,特征提取一直都是研究的热门!它直接影响着模型的准确性、计算效率、可解释性……同时,它也是我们改模型涨点,最好操作的部分!因为可切入点的真的非常之丰富,不管是轻量化、多尺度、时域与频域结合等,都能使模型性能得到提升!

2401_82426425的博客 4036

hdoj1042 大数阶乘

Problem D Time Limit : 10000/5000ms (Java/Other)Memory Limit : 262144/262144K (Java/Other) Problem Description Given an integer N(0 ≤ N ≤ 10000), your task is to calculate N! Input One N in one line, process to the end of file. Output For eac...

软糖汽水 304

SAP成本中心费用分割(KSS2)实战:从原理到月末调整全解析

本文详细解析了SAP成本中心费用分割(KSS2)的核心逻辑与实战操作,从成本要素分组配置到月末调整全流程。通过KSS2将初级成本要素按作业类型重新分类为次级成本要素,确保成本结算准确。文章还提供了常见错误处理方法和典型业务场景实战,帮助用户高效完成SAP成本结算。

weixin_29279101的博客 1254

牛客2024年除夕娱乐赛(题解)

牛客2024年除夕娱乐赛(题解)

ros275229的博客 656

ICC2: pin shape不在track上引起的drc如何解决?

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 433

手把手教你学Simulink——基于Simulink的多轮PMSM同步驱动交叉耦合控制

摘要:本文针对多轮PMSM同步驱动系统的负载不均、参数差异等问题,提出基于Simulink的交叉耦合控制解决方案。通过实时补偿轮间同步误差,实现同步误差<1%、转矩脉动<5%的性能提升。文章详细介绍了系统架构、核心算法(包括PMSM数学模型和偏差耦合控制算法)、Simulink建模步骤及参数设置,并通过仿真验证了稳态和动态性能。同时提供了工程调试建议和完整代码实现,为多轮驱动系统开发提供实用参考。该方案计算量小,可移植性强,适用于电动汽车、AGV等应用场景。

MHD0815的博客 140

C++工程师养成 每日一题(VECTOR使用)

牛牛举办了一次编程比赛,参加比赛的有3*n个选手,每个选手都有一个水平值a_i.现在要将这些选手进行组队,一共组成n个队伍,即每个队伍3人.牛牛发现队伍的水平值等于该队伍队员中第二高水平值。 例如: 一个队伍三个队员的水平值分别是3,3,3.那么队伍的水平值是3 一个队伍三个队员的水平值分别是3,2,3.那么队伍的水平值是3 一个队伍三个队员的水平值分别是1,5,2.那么队伍的水平值是2 为了让...

weixin_45853151的博客 368

SAP录入总账凭证报错 公司代码未被分配给国家或用于计算程序的国家消息号 FF703

SAP系统报错FF703的解决方案:当公司代码未分配国家或未配置计税程序时,会导致增值税计算失败。处理方法:1)通过OX02检查公司代码国家字段;2)使用OBBG为国家分配计税程序(如TAXCN)。配置步骤:1)SPRO分配公司代码到国家;2)OBBG设置国家对应的计税程序。注意事项:历史数据需清理才能修改国家字段,不同账簿可配置不同计税程序。完成配置后即可正常处理含税凭证。

金牌架构师 557

牛客寒假6-E.海啸

链接:https://ac.nowcoder.com/acm/contest/332/E 题意: 有一个沿海地区,可以看作有n行m列的城市,第i行第j列的城市海拔为h[i][j]。 由于沿海,所以这个地区经常会发生海啸。 海啸发生时,部分城市会被淹没,具体来说,海水高度会达到d,因此海拔低于d的城市都会被淹没。 现在有q次询问,每次问你一个矩形区域中,有多少城市不会被淹没。 思路: 二维前...

weixin_34067980的博客 73

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

牛客寒假算法基础集训营6 E:海啸(二维树状数组 or 前缀和 +容斥定理)

【题目】 海啸 【题解】 法一: 树状数组(单点更新区间查询)板子题,就是1≤n×m≤10^6这个数据范围让我懵了下,用vector容器就好了。 如果大于等于d就等于单点更新1,看做是二维区间查询和即可。 法二: 啧啧,不好意思给我写麻烦了,其实做两次前缀和即可。(比如a[2][2]里存的就是a[1][1]+a[1][2]+a[2][1]+a[2][2]的值。) 区间查询用到了容斥...

菜鸡成长史 394

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

牛客寒假6 补题

E-前缀和 链接:https://ac.nowcoder.com/acm/contest/332/E 来源:牛客网 题目描述 有一个沿海地区,可以看作有n行m列的城市,第i行第j列的城市海拔为h[i][j]。 由于沿海,所以这个地区经常会发生海啸。 海啸发生时,部分城市会被淹没,具体来说,海水高度会达到d,因此海拔低于d的城市都会被淹没。 现在有q次询问,每次问你一个矩形区域中,有多少城市不会被淹...

刷题记录 279

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

牛客寒假算法基础集训营6 E海啸(一维数组模拟二维数组,二维前缀和)

链接:https://ac.nowcoder.com/acm/contest/332/E 来源:牛客网   题目描述 有一个沿海地区,可以看作有n行m列的城市,第i行第j列的城市海拔为h[i][j]。 由于沿海,所以这个地区经常会发生海啸。 海啸发生时,部分城市会被淹没,具体来说,海水高度会达到d,因此海拔低于d的城市都会被淹没。 现在有q次询问,每次问你一个矩形区域中,有多少城市不会被淹没。...

dasd 396

牛客寒假算法基础集训营6 E. 海啸(二维数组+容斥)

  题目链接:https://ac.nowcoder.com/acm/contest/332/E        二维数组维护前缀和(pre[i][j] = pre[i][j] + pre[i-1][j] + pre[i][j-1] - pre[i-1][j-1]),然后根据O(1)的复杂度就能算出范围内所需要的数了,给的数据范围可能没法开数组,但是可以用vector去存,还有就是用一种不太提倡...

Charles_Zaqdt的博客 303

牛客寒假算法基础集训营6 题解

最后一场福利局,签到题好多。 A.出题思路题目描述代码如果只考虑7 8 9的话,n道题能凑的分数是$[7*n,9*n]$,加上6的话就是$[6*n,9*n]$。所以,如果$m \in [7*n,9*n]$,就不需要6,如果$m >9*n$,则无截,否则就是$m*7-n$. 题目连接 描述 小B准备出模拟赛。她把题目按难度分...

x_Armin的博客 995

2019.2.2牛客寒假算法基础集训营

整理人:李献强 A-出题 (1)马鸿儒 (2)周翔 (3)高营 B-煤气罩 (1)马鸿儒 (2)周翔 (3)高营 C-项链 (1)马鸿儒 (2)周翔 (3)高营 D-美食 (1)马鸿儒 (2)周翔 (3)高营 E-海啸 马鸿儒l F-石头剪刀布 G-区间或和 (1)马鸿儒 (2)高营 H-肥猪 马鸿儒 I-...

dengxian5867的博客 153

牛客寒假算法基础集训营(全6次)

目录 目录 牛客寒假算法基础集训营4 E、Applese 涂颜色 牛客寒假算法基础集训营1 C、小a与星际探索 D、小a与黄金街道 牛客寒假算法基础集训营5 J、迷宫 G、酷炫数字 牛客寒假算法基础集训营6 B、煤气灶 D、美食 G、区间或和 E、海啸 牛客寒假算法基础集训营3 D、处女座的训练 I、处女座的约会 牛客寒假算法基础集训营2 G、处女...

wangqianqianya的博客 1215

牛客训练六:海啸(二维树状数组+vector函数的使用)

题目链接:传送门 思路: 二维树状数组, vector(first,last)函数中assign函数相当于将first中的函数清空,然后将last中的值赋值给first。 参考文章:传送门 #include<iostream> #include<cstring> #include<cstdio> #include<vector&gt...

weixin_30617797的博客 101

牛客寒假算法基础集训营6

A.出题 分析:首先如果有解,必满足\(6 \times m \leq n \leq 9 \times m\),我们设6的个数为\(X\),则剩余的个数为\(m-X\),剩余的分值为\(n-6 \times X\),所以此时满足条件必有如下式子:\(7 \times (m-X) \leq n-6 \times X \leq 9 \times (m-X)\),化简以后最终所求为 \(max(0,7 ...

weixin_30294021的博客 171

牛客竞赛NC273390||A Math Problem

n,q,x,a的范围在1到10的5次方,也就是说,a取10的5次方,x取零时,每个a的平方可以达到10的10次方,逼近int的范围(int的范围最大值是21亿),10的5次方个a的总和就是10的15次方,还在long long的范围内,这个时候我们可以选择开long来存储n个a值相加,x范围相同,则同理。题目理解起来很简单,就是根据题目给出n个a值和x值,计算a-x的平方,然后把他们分别相加即可,看不懂英文的可以直接看输入输出也很容易理解。直接用(a-x)的平方=a的平方-2*a*x+x的平方计算即可。

Zhtsj的博客 500

牛客竞赛语法入门班选择结构习题代码整理

牛客竞赛语法入门班选择结构习题代码整理

沐遥的博客 1594

牛客竞赛记录——小紫的劣势博弈

来源:牛客网。小紫的劣势博弈

2401_89874225的博客 538
上一篇: L1-030 一帮一 (15 分)
下一篇: L1-031 到底是不是太胖了 (10 分)
黑色吊椅
博客等级 码龄9年 102粉丝 78原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值