4 条题解

  • 4
    @ 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;
    }``
    
    • 1
      @ 2025-10-30 19:38:41
      #include <stdio.h>
      int main(){
          int t,n,m,k,line,sum,a;
          scanf("%d",&t);
          while(t--){
              scanf("%d%d%d",&n,&m,&k);
              if(k%n!=0){
                  line=k/n+1;
                  a=m-line;
                  sum=m/(a+1);
              }else{ 
                  line=k/n;
                  a=m-line;
                  sum=m/(a+1);
              }
              printf("%d\n",sum);
          }
      }
      
      • 1
        @ 2025-10-27 0:53:52

        可以直接求平均值

        #include<iostream>
        using namespace std;
        int main(){
            int t;
            cin>>t;
            while(t--){
                int n,m,k;
                cin>>n>>m>>k;
                if(k<=n*((m+1)/2)){
                    cout<<"1"<<'\n'; 
                }else{
                    int a;      //求可以坐几列,未满一列算一列
                if(k%n==0){
                    a=k/n;
                }else{
                    a=k/n+1;   
                }
                int b=a/((m-a)+1);          //(m-a)是剩的列
                if(a%((m-a)+1)==0){         //求平均
                    cout<<b<<'\n';
                }
                else{
                    cout<<b+1<<'\n';
                }
                }
                
            }
            return 0;
            
        }
        
        • 1
          @ 2025-10-26 16:06:59

          考虑贪心选择。不浪费长凳长度。

          此时长凳的摆放方式如下:

          也就是说若选择长凳长度为 ​q​, 完整能放完有​m/​(​​​q+1​)​​​组,剩下的位置不足(q+1)还剩下m%(q+1)个位置​,这一行总共能选x * (m / (q + 1)) + m % (q + 1);

          n行就是 n * (x * (m / (q + 1)) + m % (q + 1));

          二分 q 即可。若 qk,则代表能够坐下所有人;若 q<k 则代表不能。

          时间复杂度:O(lognlogm)。

        • 1

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

        信息

        ID
        1162
        时间
        1000ms
        内存
        256MiB
        难度
        6
        标签
        递交数
        127
        已通过
        38
        上传者