2024
题目描述:
- 有 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;
}