zoukankan      html  css  js  c++  java
  • 分贝壳(二分法)

    题目链接:

    https://www.nowcoder.com/practice/9b59014cc1544aeeb4082f5f37ecfaea?tpId=122&&tqId=33725&rp=1&ru=/ta/exam-wangyi&qru=/ta/exam-wangyi/question-ranking

    题目描述

    牛牛和妞妞去海边捡了一大袋美丽的贝壳,千辛万苦地运回家后,牛牛和妞妞打算分掉这些贝壳。
    牛牛提出,他和妞妞轮流从还没有分配的贝壳中取一定数量的贝壳,直到贝壳分完为止。分配规则是牛牛每次取剩余贝壳的1/10(向下取整),妞妞每次固定取m个贝壳,妞妞先取。
    妞妞想要得到不少于一半的贝壳,又不想太过分,那么她一次最少取多少个贝壳才能得到不少于一半的贝壳呢?

    输入描述:

    一个正整数n,表示贝壳的总数量,1<=n<=1000000000000000000。

    输出描述:

    一个正整数m,表示妞妞一次最少取的贝壳数量。
    示例1

    输入

    10

    输出

    1
    示例2

    输入

    70

    输出

    3

    AC代码:
    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    int isOK(ll n,ll m)
    {
        ll a=0,b=0;//a->牛牛;b->妞妞;妞妞先手 
        while(n>0)
        {
            if(m>=n)
            {
                b+=n;
                n=0;
            }
            else
            {
                b+=m;
                n-=m;
                a+=n/10;
                n-=n/10;
            }
        }
        return b>=a; 
    }
    int main()
    {
        ll n;
        cin>>n;
        ll l=1,r=n,ans=-1;
        while(l<=r)
        {
            ll mid=(l+r)>>1;
            if(isOK(n,mid))
            {
                ans=mid;
                r=mid-1;
            }
            else l=mid+1;
        }
        cout<<ans<<endl;
        return 0;
    }
    参考代码:
    
    
    
     
     
  • 相关阅读:
    博客最新博文通告
    博文快速导航
    创业
    央行回应中国版数字货币:与人民币等价 不会让钱贬值
    高屋建瓴
    高层人对事的处理
    老板的区别
    沟通的四大法则
    赚钱规则
    合伙做生意的原则
  • 原文地址:https://www.cnblogs.com/dragondragon/p/13390521.html
Copyright © 2011-2022 走看看