70分二分,求助大佬
查看原帖
70分二分,求助大佬
778747
someone002楼主2023/7/9 18:47
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
long long l,m,n;
int a[50009];
int b[50009];
long long ans=0;
void find(long long l,long long r)
{
   if(l==r)
   return;
   long long mid=(l+r)/2;
   long long tot=0;
   for(int i=1;i<=n+1;i++)
   {
   	
   	if(b[i]<mid)
   	{
   		long long cao=b[i];
   		while(cao<=mid&&i<=n+1)
   		{
   			
   			i++;
   			cao=cao+b[i];
   			tot++;
   		}
   		
   	}
   	
   }
   if(tot>m)
   {
   	find(l,mid);
   }
   if(tot<=m)
   {
   	ans=mid;
   	find(mid+1,r);
   }
}
int main()
{
   cin>>l>>n>>m;
   a[1]=0;
   for(int i=2;i<=n+1;i++)
   cin>>a[i];
   a[n+2]=l;
   for(int i=2;i<=n+2;i++)
   {
   	b[i-1]=a[i]-a[i-1];
   }
   //for(int i=1;i<=n+1;i++)
   
   //cout<<b[i]<<" ";
   find(1,1000000001);
   cout<<ans;
}

2023/7/9 18:47
加载中...