为啥我90分,第二点爆空间
查看原帖
为啥我90分,第二点爆空间
131314
Balloonist楼主2021/5/23 17:31

为啥我90分,第二点爆空间

#include<bits/stdc++.h>
using namespace std;
int h[500009];
int n,m,a,b;
int ans=-1;
int q;

inline int read(){
   int s=0,w=1;
   char ch=getchar();
   while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
   while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
   return s*w;
}
int check(int x)
{
	int o=0;
	for(int i=0;i<=n;)
	{
		int j=i;
		int k=h[j];
		while(1)
		{
			i++;
			if(h[i]-h[j]<x)
			{
				o++;
			}
			else break;
			if(o>m)
			return 0;
		}
	}
	return 1;
}
void go(int l,int r)
{
	int mid=(l+r)/2;
	if(check(mid))
	{
		if(check(mid+1)==0)
		{
			cout<<mid;
			exit;
		 } 
		 else
		go(mid,r);
	}
	else
	{
		go(l,mid);
	}
}
int main()
{
//	freopen("cuttree.in","r",stdin);
//	freopen("cuttree.out","w",stdout);
	q=read();
    n=read();
    m=read();
    h[0]=0;
    h[n+1]=q;
	for(int i=1;i<=n;i++)
	{
		h[i]=read();
	}
	go(1,q);
 	return 0;
}

DL赐教!

2021/5/23 17:31
加载中...