1. 程式人生 > >GYM 101755 K.Video Reviews 【貪心】+【二分】

GYM 101755 K.Video Reviews 【貪心】+【二分】

<題目連結>

題目大意:

一家公司想讓n個人給他們的產品評論,所以依次去找這n個人,第i個人會評論當且僅當已經有ai個人評論或他確實對這個產品感興趣,但是這n個人都不對這個產品感興趣,問這個公司至少要說服幾個人對該產品該興趣才能至少收到m個人的評論。

解題分析:

直接二分答案,然後按順序進行判斷,如果ai大於當前評論的人就說服該人,這裡用到了貪心的思想(本題的關鍵),因為說服該人能夠提供評論數的貢獻,所以越早做貢獻能夠帶來更多的貢獻,然後根據評論的人數與m的比較來控制二分答案的方向。

 1
#include <cstdio> 2 using namespace std; 3 4 const int M =2e5+10; 5 int n,m; 6 int arr[M]; 7 bool check(int x){ 8 int res=0; //res代表當前的評論數 9 for(int i=1;i<=n;i++){ 10 if(arr[i]<=res)res++; 11 else if(arr[i]>res&&x>0){ //勸說該人 12
x-=1; 13 res++; 14 } 15 } 16 return res>=m; 17 } 18 int main(){ 19 scanf("%d%d",&n,&m); 20 for(int i=1;i<=n;i++){ 21 scanf("%d",&arr[i]); 22 } 23 int l=0,r=n; 24 int ans=0; 25 while(l<=r){ //
直接二分答案,列舉需要勸說的人的數量 26 int mid=(l+r)>>1; 27 if(check(mid))ans=mid,r=mid-1; 28 else l=mid+1; 29 } 30 printf("%d\n",ans); 31 return 0; 32 }

 

 

2018-11-04