UOJ #206. 【APIO2016】Gap【交互题】

参考:https://blog.csdn.net/clover_hxy/article/details/70767653
人生第一次交互题...不是很难但是思维和传统题差别挺大的(以及并不会本地测试= =),详见参考blog和代码吧

#include"gap.h"
#include<iostream>
#include<cstdio>
using namespace std;
const long long inf=1e18;
long long findGap(int T,int N)
{
	long long ans=0;
	if(T==1)
	{
		long long mn1,mx1;
		MinMax(0,inf,&mn1,&mx1);
		int tmp=N-2;
		if(tmp==0)
			ans=mx1-mn1;
		while(tmp>0)
		{
			long long mn,mx;
			if(mn1+1<=mx1-1)
				MinMax(mn1+1,mx1-1,&mn,&mx);
			else
				break;
			ans=max(ans,max(mn-mn1,mx1-mx));
			if(tmp==2)
				ans=max(ans,mx-mn);
			if(mn==mx)
				tmp--;
			else
				tmp-=2;
			mn1=mn,mx1=mx;
		}
	}
	else
	{
		long long l,r;
		MinMax(0,inf,&l,&r);
		if(N==2||N==1)
			return r-l;
		long long len=(r-l-1)/(N-2)+1,la=l,s=l+1,t;
		for(int i=1;i<=N-2;i++)
		{
			t=min(s+len-1,r-1);
			if(s>t)
				break;
			long long mn,mx;
			MinMax(s,t,&mn,&mx);
			if(mn!=-1)
			{
				ans=max(ans,mn-la);
				la=mx;
			}
			s=t+1;
		}
		ans=max(ans,r-la);
	}
	return ans;
}
posted @ 2018-04-13 19:37  lokiii  阅读(811)  评论(0编辑  收藏  举报