Loading

题解:P17687 [IO 2025 #2] 尼基塔与钓鱼

首先很容易发现一个性质,一定会在有鱼的坐标放船,这样不会更劣。
然后我们可以发现 \([x,x+k]\) 与 \([x-k,x]\) 其实是等价的,所以可以选择 \([x,x+k]\) 进行枚举。
考虑先把坐标排序,然后使用双指针枚举区间左端点和区间右端点即可,并打擂刷新答案即可。

#include<bits/stdc++.h>
using namespace std;
const int MAXN=1E5+5;
int n,k;
int a[MAXN];
int ans;
int main(){
    cin>>n>>k;
    for(int i=1;i<=n;++i)cin>>a[i];
    sort(a+1,a+1+n);
    int r=1;
    for(int l=1;l<=n;++l){//考虑将每一个位置作为左端点
        if(r<l)r=l;//保证r>=l
        int t=a[l]+k;//寻找的坐标
        while(a[r]<=t&&r<=n)r++;
        ans=max(ans,r-l);
    }
    cout<<ans<<endl;
    return 0;
}
/*
很容易发现一个性质,一定会在有鱼的坐标放船,这样不会更劣。
*/
posted @ 2026-10-16 21:25  heffo_hard  阅读(9)  评论(0)    收藏  举报