3 solutions

  • 0
    @ 2025-7-24 14:20:56
    #include<bits/stdc++.h>
    using namespace std;
    const int N=10010;
    int a[N],b[N];
    int main()
    {
        int n,m;
        cin>>n>>m;
        for(int i=1;i<=n;i++)
        {
            cin>>a[i];
        }
        for(int i=1;i<=n;i++)
        {
            int minv=1e8;
            int minw=0;
            for(int j=1;j<=m;j++)
            {
                if(b[j]<minv)
                {
                    minv=b[j];
                    minw=j;
                }
            }
            b[minw]+=a[i];
        }
        int maxu=0;
        for(int i=1;i<=m;i++)
        {
            if(b[i]>maxu)
            {
                maxu=b[i];
            }
        }
        cout<<maxu;
        return 0;
    }
    
    • 0
      @ 2024-6-11 10:45:54

      模拟(O(nm)O(nm))

      • 算法分析,每次来一个接水的同学,我们找到最小的水龙头编号,然后让当前人去接,所有人都接水以后,我们去寻找最后一个流完水的水龙头。
      #include<bits/stdc++.h>
      using namespace std;
      const int M=110;
      int s[M];
      int main()
      {
          int n,m;
          cin>>n>>m;
          for(int i=1;i<=n;i++)
          {
              int x;
              cin>>x;//第i个同学来接水
              int minid;
              for(int j=1;j<=m;j++) //找到最小的水龙头所在的位置
              {
                  if(j==1||s[j]<s[minid])
                  {
                      minid=j;
                  }
              }
            
              s[minid]+=x; //第i个同学到最小的水龙头的位置
          }
          int maxv=0;
          for(int i=1;i<=m;i++) //所有同学都接水以后,找到最大的水龙头的流水时间
          {
              if(i==1||s[i]>maxv)
              {
                  maxv=s[i];
              }
          }
          cout<<maxv;
          return 0;
      }
      

      优化(nlogmnlogm)

      由于涉及到找最小值,我们可以使用堆将每次查找的时间从O(m)O(m) 优化到OlogmOlogm

      #include<bits/stdc++.h>
      using namespace std;
      int main()
      {
          int n,m;
          cin>>n>>m;
          priority_queue<int,vector<int>,greater<int> > q; //小根堆
          for(int i=1;i<=n;i++)
          {
              int x;
              cin>>x;
              if(q.size()<m) //前m个人,直接接水
              {
                  q.push(x);
              }
              else
              {
                  q.push(q.top()+x); //到前这个人到最快接完水的水龙头
                  q.pop(); //删除最小的
              }
          }
          while(q.size()>1) q.pop(); //只保留最大的
          cout<<q.top();
          return 0;
      }
      
      • -1
        @ 2024-9-21 11:07:04
        
        #include<bits/stdc++.h>
        using namespace std;
        int main()
        {
            int m,k;
            cin>>m>>k;
            while(m%19!=0 && m/3!=k)
            {
                if(m%19==0 && m/3==k) cout<<"YES";
                else cout<<"NO";
                m++;
            }    
            return 0;
        }
        
        • 1

        Information

        ID
        430
        Time
        1000ms
        Memory
        128MiB
        Difficulty
        9
        Tags
        # Submissions
        10
        Accepted
        6
        Uploaded By