蓝桥杯合集

2024

[蓝桥杯 2024 省 C] 挖矿

题目描述:

  • 有 n 个矿洞,坐标 -1e6 到 1e6,从坐标 0 开始每次可以往相邻位置移动一格,最多移动 m 次,问最多可以经过多少个矿洞。

数据范围:

  • $ 1\le n\le 10^5,1\le m\le 2\times 10^6$

题解:

#include<iostream>
using namespace std;
const int M = 2e6+5,Offset = 1e6;
int pre[M], n, m, ans;
inline void update(int r,int l){
	ans = max(ans,pre[min(r,M-1)] - pre[max(0,l)]);
}
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1,j;i<=n;i++) scanf("%d",&j),++pre[j+Offset];
	for(int i=0;i<M;i++) pre[i] += pre[i-1];
	for(int i=0;2*i<=m;++i) update(Offset+(m-2*i),Offset-i-1);
	for(int i=0;2*i<=m;++i) update(Offset+i,Offset-(m-i*2)-1);
	printf("%d",ans);
	return 0;
}
posted @ 2024-12-25 15:31  浅叶梦缘  阅读(122)  评论(0)    收藏  举报