3 条题解

  • 1
    @ 2025-10-27 13:37:03
    和morgen学长的差不多,改了一点😄 
    #include<iostream>
    using namespace std;
    int n,m,k;
    bool cheak(int mid)
    {
        //sum是当前选mid长度长凳最大容纳总人数
        //最大容纳就是空位最少
        //紧邻排列且每个排列空一位最优
        //m/(mid+1)为最小空位数
        int sum=n*(m-m/(mid+1));
        if(sum>=k)
        return 1;
        return 0;
    }
    int main()
    {
        int t;
        cin>>t;
        while(t--)
        {
            cin>>n>>m>>k;
            //二分找最优
            int l=1,r=m;
            int ans=0;
            while(l<=r)
            {
                int mid=(l+r)/2;
                if(cheak(mid))
                {
                    ans=mid;
                    r=mid-1;
                }
                else
                {
                    l=mid+1;
                }
            }
            cout<<ans<<endl;
        }
        return 0;
    }``
    

    纵横千里独行客 何惧前路雨潇潇

    信息

    ID
    1162
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    递交数
    12
    已通过
    5
    上传者