zoukankan      html  css  js  c++  java
  • Gym 100425A Luggage Distribution (组合数学,二分)

    一开始想着球盒模型,数据范围大,递推会GG。

    用凑的方法来算方案。往n个小球之间插两个隔板,方案是(n-1)*(n-2)/2,不区分盒子,三个盒子小球数各不相同的方案数被算了6次(做排列),

    两个相同的被算了3次,如果n可以被3整除,那么3个相同的被算了一次。全部都加到6,在一起除以6就得到总的方案数。

    方案数对n的函数具有单调性,因此二分答案。

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    
    ll cal(ll n)
    {
        return ((n-1)*(n-2)/2+(n-1)/2*3+!(n%3)*5)/6;
    }
    
    ll chaos(ll x)
    {
        ll L = 3, R = 2e9,mid;
        for(;L<R; cal(mid)<x?L=mid+1:R=mid ) mid = (L+R)>>1;
        return L;
    }
    
    int main()
    {
        ll L,R;
        scanf("%I64d%I64d",&L,&R);
        ll sL = chaos(L), sR = chaos(R+1);//由于二分本身是找下界所以写成R+1变成找上界
        printf("%I64d",sR-sL);
    }
  • 相关阅读:
    11月21日
    11月20日
    11月19日
    11月18日
    11月17日
    11月15日
    图文教程:在Mac上搭建Titanium的iOS开发环境
    经验
    IT术语的正确读法
    NSLog( @"%@", i );
  • 原文地址:https://www.cnblogs.com/jerryRey/p/4754609.html
Copyright © 2011-2022 走看看