1 条题解

  • 0
    @ 2026-5-18 23:28:00

    题目传送门

    思路

    显而易见的,这是一道二分题,若 kk 符合条件,即至少在操作后有 kk 个数大于等于 kk,则一定有至少 kk 个数大于等于 k1k-1k1k-1 符合条件。checkcheck 也十分简单,二分 hh,若 haih \leq a_isum+1sum+1,若 ai=h1a_i=h-1 可以使用一次操作,最多取 kk 次。

    代码

    #include<bits/stdc++.h>
    using namespace std;
    #define int long long
    const int N=1e5+10;
    int n,k,a[N];
    bool check(int x){
    	int sum1=0,sum2=0;
    	for(int i=1;i<=n;i++){
    		if(a[i]==x-1&&sum2<k){
    			sum1++;
    			sum2++;
    		}
    		if(a[i]>=x){
    			sum1++;
    		}
    	}
    //	cout<<(sum1>=x)<<endl;
    	if(sum1>=x)return 1;
    	return 0;
    }
    signed main(){
    	cin>>n>>k;
    	for(int i=1;i<=n;i++){
    		cin>>a[i];
    	}
    //	sort(a+1,a+1+n);
    	int l=1,r=1e9,ans;
    	while(l<=r){
    		int mid=(l+r)/2;
    //		cout<<mid<<endl;
    		if(check(mid)){
    			l=mid+1;
    			ans=mid;
    		}
    		else{
    			r=mid-1;
    		}
    	}
    //	cout<<check(2)<<endl;
    	cout<<ans;
    }
    
    • 1

    信息

    ID
    7045
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    递交数
    20
    已通过
    4
    上传者