• 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
    ",ans);
    31     return 0;
    32 }

    2018-11-04

  • 相关阅读:
    组合模式
    HashMap,ArrayList扩容
    Maven入门使用(一)
    OutputStreamWriter API 以及源码解读
    java.io.BufferedWriter API 以及源码解读
    java.io.writer API 以及 源码解读
    自定义redis序列化工具
    策略模式
    Spring下redis的配置
    简单工厂模式
  • 原文地址:https://www.cnblogs.com/00isok/p/9905960.html
Copyright © 2020-2023  润新知