1 条题解
-
0
思路
显而易见的,这是一道二分题,若 符合条件,即至少在操作后有 个数大于等于 ,则一定有至少 个数大于等于 故 符合条件。 也十分简单,二分 ,若 则 ,若 可以使用一次操作,最多取 次。
代码
#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
- 上传者