4 solutions

  • 1
    @ 2025-8-4 16:21:43
    #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];
    	}
    	int res=0;
    	for(int i=1;i<=n;i++)
    	{	
    		sort(b+1,b+m+1);
    		b[1]+=a[i];
    	}	sort(b+1,b+m+1);
    	cout<<b[m];
    	return 0;
    }
    
    
    • 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
          8
          Tags
          # Submissions
          13
          Accepted
          8
          Uploaded By