题目链接:
K - Video Reviews
题目大意:
一家公司想让个人给他们的产品评论,所以依次去找这个人,第i个人会评论当且仅当已经有个人评论或他确实对这个产品感兴趣,但是这个人都不对这个产品感兴趣,问这个公司至少要说服几个人对该产品该兴趣才能至少收到个人的评论.
具体思路:二分最小值,当当前的人发现满足的人数不够的时候,就通过二分的最小值给补上就可以了。
AC代码:
1 #include<bits/stdc++.h> 2 using namespace std; 3 # define ll long long 4 # define inf 0x3f3f3f3f 5 const int maxn = 2e5+100; 6 ll a[maxn]; 7 ll n,m; 8 bool check(ll k) 9 { 10 ll ans=0; 11 for(ll i=1; i<=n; i++) 12 { 13 if(a[i]<=ans) 14 ans++; 15 else if(k) 16 { 17 ans++; 18 k--; 19 }` 20 if(ans==m) 21 return true; 22 } 23 return false; 24 } 25 int main() 26 { 27 scanf("%lld %lld",&n,&m); 28 for(ll i=1; i<=n; i++) 29 { 30 scanf("%lld",&a[i]); 31 } 32 //sort(a+1,a+n+1); 33 ll ans=0; 34 ll l=0,r=9e18; 35 //cout<<check(1)<<endl; 36 while(l<=r) 37 { 38 ll mid=(l+r)>>1ll; 39 if(check(mid)) 40 { 41 ans=mid; 42 r=mid-1; 43 } 44 else 45 l=mid+1; 46 } 47 printf("%lld\n",ans); 48 return 0; 49 }