列表

详情


NC26250. 小石的海岛之旅

描述

暑假到了,小石和小雨到海岛上玩。
从水平方向看海岛可以看成 个小块,每一个小块都有一个高度h_i
水位一开始为 ,随着水位的上升,海岛分成了若干块。
现在有 个询问,求当水位为 时,海岛会分成多少块。

输入描述

第一行输入两个正整数,分别表示海岛小块个数和询问个数。
第二行输入 个整数 ,表示每一块的高度。
第三行输入 个整数 ,表示每一个询问,保证输入的 单调递增。

输出描述

共  行,分别对应  个询问的答案。

示例1

输入:

7 3
1 2 3 1 2 1 3
1 2 3

输出:

3
2
0

说明:

当水位高度为 1 时,岛屿被分成 3 块,2 3;2;3

当水位高度为 2 时,岛屿被分成 2 块:3;3 。

当水位高度为 3 时,岛屿全部被淹没,剩余 0 块 。

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(clang++ 11.0.1) 解法, 执行用时: 7ms, 内存消耗: 440K, 提交时间: 2022-11-13 21:36:08

#include<bits/stdc++.h>
using namespace std;
int n,m,sum,h,a[1111];
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	cin>>a[i];
	while(m--)
	{
		sum=0;
		cin>>h;
		for(int i=1;i<=n;i++)
		if(a[i]>h&&a[i+1]<=h)
		sum++;
		cout<<sum<<endl;
	}
	return 0;
}

Python3(3.5.2) 解法, 执行用时: 231ms, 内存消耗: 3816K, 提交时间: 2019-07-12 20:56:48

n,m=map(int,input().split())
h=list(map(int,input().split()))
a=list(map(int,input().split()))
for i in a:
	ans=int(h[0]>i)
	for j in range(1,len(h)):
		if h[j]>i and h[j-1]<=i:
			ans+=1
	print(ans)

上一题