zoukankan      html  css  js  c++  java
  • bzoj1816: [Cqoi2010]扑克牌(二分答案判断)

    1816: [Cqoi2010]扑克牌

    题目:传送门 

    题解:

       被一道毒瘤题搞残了...弃了坑来刷刷水题

       一开始还想复杂了...结果发现二分水过:

       二分答案...然后check一下,joker肯定尽量用mid次,那么哪种牌不够就补(因为每次只能补一种,所以如果次数用完就return false)

    代码:

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<cstdlib>
     4 #include<cmath>
     5 #include<algorithm>
     6 using namespace std;
     7 int n,m,ans;
     8 int a[1100];
     9 bool check(int x)
    10 {
    11     int s=min(m,x);
    12     for(int i=1;i<=n;i++)
    13     {
    14         if(a[i]<x)
    15         {
    16             s=s-(x-a[i]);
    17             if(s<0)return false;
    18         }
    19     }
    20     return true;
    21 }
    22 int main()
    23 {
    24     scanf("%d%d",&n,&m);
    25     for(int i=1;i<=n;i++)scanf("%d",&a[i]);
    26     int l=0,r=999999999;ans=0;
    27     while(l<=r)
    28     {
    29         int mid=(l+r)/2;
    30         if(check(mid)==true)
    31         {
    32             l=mid+1;
    33             ans=mid;
    34         }
    35         else r=mid-1;
    36     }
    37     printf("%d
    ",ans);
    38     return 0;
    39 }
  • 相关阅读:
    windows下安装各种python包
    error?
    PBS error
    samtools error
    samtools idxstats
    maf error
    tba error
    基因组拼接中常见的名词解释
    Spring could使用FeignClient超时问题
    sql在指定列后添加或删除字段
  • 原文地址:https://www.cnblogs.com/CHerish_OI/p/8511457.html
Copyright © 2011-2022 走看看