zoukankan      html  css  js  c++  java
  • [CF911B]Two Cakes

    题目大意:
      有两种蛋糕,分别被切成了a块和b块,要把这些蛋糕分到n个盘子里。
      要求每个盘子里只能有一种蛋糕,每一种蛋糕都被分。问最优情况下,盘子里至少能放几个蛋糕。

    思路:
      二分答案。
      由于每个蛋糕都要被分,所以二分的上界是min(a,b)而不是a+b。
      然后O(n)检验即可。

     1 #include<cstdio>
     2 #include<cctype>
     3 #include<algorithm>
     4 inline int getint() {
     5     register char ch;
     6     while(!isdigit(ch=getchar()));
     7     register int x=ch^'0';
     8     while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
     9     return x;
    10 }
    11 inline bool check(const int &n,int a,int b,const int &m) {
    12     for(register int i=1;i<=n;i++) {
    13         if(a>=m) {
    14             a-=m;
    15             continue;
    16         }
    17         if(b>=m) {
    18             b-=m;
    19             continue;
    20         }
    21         return false;
    22     }
    23     return true;
    24 }
    25 int main() {
    26     const int n=getint(),a=getint(),b=getint();
    27     int l=1,r=std::min(a,b);
    28     while(l<=r) {
    29         const int mid=(l+r)>>1;
    30         if(check(n,a,b,mid)) {
    31             l=mid+1;
    32         } else {
    33             r=mid-1;
    34         }
    35     }
    36     printf("%d
    ",l-1);
    37     return 0;
    38 }
  • 相关阅读:
    贪婪算法
    递归 快速排序
    递归 判断数组最大数字
    加法递归
    快速排序
    二分查找
    介绍求解AX=b:可解性与解的结构
    消元法求解线性方程组
    内容说明-线性代数
    gis
  • 原文地址:https://www.cnblogs.com/skylee03/p/8175578.html
Copyright © 2011-2022 走看看