ACM 训练日志记录 · 思考 · 成长 提交 / 修改记录
王梓豪 / 题目列表训练档案
导出

舞蹈面试

来源:其他 ★ 1500

本题活力0.29按难度、完成结果与训练证据估算

算法如山行则将至

题目描述

在面试顺序中,找到最小的面试人数,使得已面试中存在至少m个身高差不超过k的小朋友。

代码

#include <bits/stdc++.h>
using namespace std;
bool solve(vector<int> &v,int l,int m,int k)
{
    vector<int> v1(v.begin(),v.begin()+l);
    sort(v1.begin(),v1.end());
    int ft=0;int ed=m-1;
    bool flag=0;
    if(ed>=v1.size())return false;
    if(v1[ed]-v1[ft]<=k)return true;
    while(ed<v1.size()&&v1[ed]-v1[ft]>k)
    {
        if(v1[ed]-v1[ft]<=k)return true;
        ed++;
        ft++;
    }
    return false;
}
int main()
{
int n,m,k;
cin>>n>>m>>k;
vector<int> v(n);
for(int i=0;i<n;i++)
{
    cin>>v[i];
}
  int mid,left = 1,right = n;
    int ans=-1;
    while (left<=right)
    {
        mid=(left+right)/2;
        if (solve(v,mid,m,k))
        {
            ans=mid;
            right=mid-1;
        }
        else
        {
            left=mid+1;
        }
    }
    cout<<ans<<endl;
}