[CF1156C] Match Points - 双指针

给你一个在数轴上的点集 \(x_1, x_2, \dots, x_n\)。 每两个点 \(i\)\(j\) 可以在满足以下情况的时候相连: 点 \(i\) 和点 \(j\) 均未与其他点相连;\(\left| x_i - x_j \right| \geq z\)。那么请你求出最多可以连接多少点对?

Solution

双指针一遍即可

不知道这个题怎么评的分

#include <bits/stdc++.h>
using namespace std;

#define int long long
const int N = 200005;
int n,z,x[N],u[N];

signed main() {
    ios::sync_with_stdio(false);
    cin>>n>>z;
    for(int i=1;i<=n;i++) cin>>x[i];
    sort(x+1,x+n+1);
    int j=1;
    for(int i=1;i<=n;i++) if(x[i]-z>=x[j]) ++j;
    cout<<min(j-1,n/2);
}

猜你喜欢

转载自www.cnblogs.com/mollnn/p/12636054.html