8 条题解

  • 1
    @ 2025-3-29 14:38:04
    #include<bits/stdc++.h>
    using namespace std;
    int n, m, l,r, a[100010],ans;
    bool check(int mid)
    {
    	int sum=0,num=0;
    	for(int i=0;i<=n;i++)
    	{
    		if(sum+a[i]<=mid)
    		{
    			sum+=a[i];		
    		}
    		else
    		{
    			sum=a[i];
    			num++;
    		}
    	}
    	return num<=m;			
    }
    int main()
    {
    	cin>>n>>m;
    	for(int i=1;i<=n;i++)
    	{
    		cin>>a[i];
    		l=max(l,a[i]);
    		r+=a[i];	
    	}
    	while(l<=r)
    	{
    		int mid=(l+r)>>1;
    		if(check(mid))
    		{
    			r=mid;		
    		}
    		else
    		{
    			l=mid+1;
    		}
    	}
    	cout<<l;
    }
    
    ``
    • @ 2025-3-29 14:38:44

      不知道为什么老是超时

  • 1
    @ 2023-5-2 18:28:38
    #include <bits/stdc++.h>
    using namespace std;
    long long a[1000005],n,m,maxn;
    bool check(int x){
    	int sum=0,cnt=1;
    	for(int i=1;i<=n;i++){
    		if(sum+a[i]<=x) sum+=a[i];
    		else{
    			cnt++;
    			sum=a[i];
    		}
    	}
    	return cnt<=m;
    }
    int main(){
    	cin>>n>>m;
    	for(int i=1;i<=n;i++){
    		cin>>a[i];
    		maxn=max(maxn,a[i]);
    	}
    	int l=maxn, r=1000000000;
    	while(l<r){
    		int mid=(l+r)>>1;
    		if(check(mid))r=mid;
    		else l=mid+1;
    	}
    	cout<<l;
    }
    
    
    • 1
      @ 2023-5-1 11:57:50
      using namespace std;
      long long a[1000005],n,m,maxn;
      bool check(int x){
      	int sum=0,cnt=1;
      	for(int i=1;i<=n;i++){
      		if(sum+a[i]<=x) sum+=a[i];
      		else{
      			cnt++;
      			sum=a[i];
      		}
      	}
      	return cnt<=m;
      }
      int main(){
      	cin>>n>>m;
      	for(int i=1;i<=n;i++){
      		cin>>a[i];
      		maxn=max(maxn,a[i]);
      	}
      	int l=maxn, r=1000000000;
      	while(l<r){
      		int mid=(l+r)>>1;
      		if(check(mid))r=mid;
      		else l=mid+1;
      	}
      	cout<<l;
      }
      
    • 0
      @ 2023-5-1 12:00:37
      #include <bits/stdc++.h>
      using namespace std;
      long long a[1000005],n,m,maxn;
      bool check(int x){
      	int sum=0,cnt=1;
      	for(int i=1;i<=n;i++){
      		if(sum+a[i]<=x) sum+=a[i];
      		else{
      			cnt++;
      			sum=a[i];
      		}
      	}
      	return cnt<=m;
      }
      int main(){
      	cin>>n>>m;
      	for(int i=1;i<=n;i++){
      		cin>>a[i];
      		maxn=max(maxn,a[i]);
      	}
      	int l=maxn, r=1000000000;
      	while(l<r){
      		int mid=(l+r)>>1;
      		if(check(mid))r=mid;
      		else l=mid+1;
      	}
      	cout<<l;
      }
      
      • 0
        @ 2023-5-1 11:59:33
        #include<algorithm>
        using namespace std;
        int a[1000005],n,m,maxn;  
        bool check(int x){
        	int sum=0,cnt =1;
        	for (int i=1; i<=n; i++){
        		if (sum+a[i]<=x){
        			sum +=a[i];
        		}
        		else{
        			cnt++;
        			sum=a[i];
        		}
        	
        	}
        	return cnt <= m;
        }                                                
        int main(){
        	cin >>n >> m;
        	for (int i=1; i<=n; i++){
        		cin >> a[i];
        		maxn=max(maxn,a[i]);
        	}
        	int l=maxn,r=1000000000;
        	while(l<r){
        		int mid=(l+r)>>1;
        		if (check(mid)) {
        			r=mid;
        		}
        		else {
        			l=mid+1;
        		}
        	}
        	cout << l;
        	return 0;
        }
        
        • -1
          @ 2022-10-18 22:32:30
          #include <iostream>
          #include <string.h>
          using namespace std;
          const int N = 1e5 + 10;
          const int INF = 0x3f3f3f3f;
          long long n , k;
          int a[N];
          bool cheak(int x)
          {
          	int ans = 1 , sum = 0;
          	for(int i = 1 ; i <= n ; i++)
          	{
          		sum += a[i];
          		if(sum > x)
          		{
          			ans++;
          			sum = a[i];
          		}
          	}
          	return ans <=  k;
          }
          int main()
          {
          	cin >> n >> k;
          	int l , r;
          	l = 0 , r = 0;
          	for(int i = 1 ; i <= n ; i++)
          	{
          		cin >>a[i];
          		r += a[i];
          		l = max(l , a[i]);
          	}
          	while(l < r)
          	{
          		int mid = l + r >> 1;
          		if(cheak(mid))
          			r = mid;
          		else
          			l = mid + 1;
          	}
          	cout << r << endl;
          	return 0;
          }
          
          • -1
            @ 2022-5-14 12:00:51
            #include <queue>
            #include <math.h>
            #include <stack>
            #include <stdio.h>
            #include <iostream>
            #include <vector>
            #include <iomanip>
            #include <string.h>
            #include <algorithm>
            using namespace std;
            #define LL long long
            const int N = 1e6 + 10;
            const int INF = 0x3f3f3f3f;
            int n,m;
            int maxx=0;
            int a[N];
            int minn=0;
            bool cheak(int x)
            {
            	int ans=0;
            	int cnt=1;
            	for(int i=0;i<n;i++)
            	{
            		if(ans+a[i]<=x)
            			ans+=a[i];
            		else
            		{
            			ans=a[i];
            			cnt++;
            		}
            	}
            	return cnt<=m;
            	
            }
            int find()
            {
            	int l=minn,r=maxx;
            	while(l<r)
            	{
            		int mid=l+r>>1;
            		if(cheak(mid))
            			r=mid;
            		else
            			l=mid+1;
            	}
            	return r;
            }
            int main ()
            {
            	cin >> n >> m;
            	for(int i=0;i<n;i++)
            	{
            		cin >> a[i];
            		maxx+=a[i];
            		minn=max(a[i],minn);
            	}
            	cout << find()<<endl;
            	return 0;
            }
            
            
            • -1
              @ 2021-12-25 20:51:28
              #include <queue>
              #include <math.h>
              #include <stack>
              #include <stdio.h>
              #include <iostream>
              #include <vector>
              #include <iomanip>
              #include <string.h>
              #include <algorithm>
              using namespace std;
              #define LL long long
              const int N = 1e6 + 10;
              const int INF = 0x3f3f3f3f;
              int n,m,x[N],sum=0,max1=0;
              int aa(int sum1)
              {
                  int num=1;
                  int temp=0;
                  for(int i=0;i<n;i++)
                  {
                      temp+=x[i];
                      if(temp>sum1)
                      {
                          num++;
                          temp=x[i];
                      }
                  }
                  if(num>m)
              		return 1;
                  return 0;
              }
              int main()
              {
                  cin>>n>>m;
                  for(int i=0;i<n;i++)
                  {
                      cin>>x[i];
                      sum+=x[i];
                      if(x[i]>max1)max1=x[i];
                  }
                  int l=max1,r=sum;
                  while(l<r)
                  {
                      int mid=(l+r)/2;
                      if(aa(mid))l=mid+1;
                      else r=mid;
                  }
                  cout<<r<<endl;
                  return 0;
              
              }
              • 1

              信息

              ID
              360
              时间
              1000ms
              内存
              512MiB
              难度
              6
              标签
              递交数
              438
              已通过
              133
              上传者