b_nk_热心的牛牛 & 三角形(思维题:二分 | 斐波那契变形)

热心的牛牛

牛牛有k颗糖果,n位朋友,怎么分配才能让所有朋友都比自己多,且自己尽量多

思路:二分+贪心,自己尽量多,然后让朋友尽量不多于自己太多

typedef long long ll;
class Solution {
public:
    ll Maximumcandies(ll n, ll k) {
        ll l=0, r=k, ans=0;
        while (l<=r) {
            ll m=l+(r-l)/2;
            if ((__int128)(m+1)*n+m<=k) ans=m, l=m+1; //一直错,直到找了下这个int类型...
            else r=m-1;
        }
        return ans;
    }
};

三角形

小明有一根长度为a的木棒,现在小明想将木棒分为多段,使得取出的任意三段都不能构成三角形,小明想知道木棒最多被分成几段?

  • 不能构成三角形:两边a、b之和小于不小于第三边c
  • 尽量让段数多,就是让a+b=c
typedef long long ll;
const int N=60;
class Solution {
public:
    ll fac[N+5];
    ll get(ll len) {
        ll ans=0, s=0, i=0;
        while(i<N) {
            s+=fac[i];
            if(s>len) break;
            i++, ans++;
        }
        return ans;
    }
    int stick(ll a) {
        fac[0]=1, fac[1]=1;
        for (int i=2; i<N; i++) fac[i]=fac[i-2]+fac[i-1];
       return get(a);
    }
};
原文地址:https://www.cnblogs.com/wdt1/p/14014975.html