记录编号 70162 评测结果 AAAAAWW
题目名称 [NOIP 2002]矩形覆盖 最终得分 71
用户昵称 Gravatar老师好~~~ 是否通过 未通过
代码语言 C++ 运行时间 0.055 s
提交时间 2013-09-24 19:19:46 内存使用 0.32 MiB
显示代码纯文本
#include<fstream>
#include<algorithm>
using namespace std;
ifstream fin("jxfg.in");
ofstream fout("jxfg.out");
const int INF=99999999;
class woca
{
public:
	int x;
	int y;
}a[52];
int n,k;
bool cp(woca n,woca m)
{
	if(n.x<m.x)return 1;else return 0;
}
bool ck(woca n,woca m)
{
	if(n.y<m.y)return 1;else return 0;
}
int main()
{
	fin>>n>>k;
	int i,p;
	int b,c,d,e,f,j,h,q,w;
	int K=0,P=0,F=0;
	int ans=INF;
	woca flag[52];
	for(i=1;i<=51;i++)
		a[i].x=INF;
	for(i=1;i<=n;i++)
		fin>>a[i].y>>a[i].x;
	if(k==1)
	{
		sort(a+1,a+n+1,cp);
		b=a[n].x-a[1].x;
		sort(a+1,a+n+1,ck);
		c=a[n].y-a[1].y;
		fout<<b*c<<endl;
		return 0;
	}
	if(k==2)
	{
		sort(a+1,a+n+1,cp);
		for(i=1;i<=n;i++)
		{
			flag[i].x=a[i].x;
		    flag[i].y=a[i].y;
		}
		for(i=1;i<=n;i++)
		{
			while(a[++K].x<=a[i].x){}
			K--;
			if(K>=n)
				break;
			b=a[K].x-a[1].x;
			c=a[n].x-a[K+1].x;
			sort(flag+1,flag+K+1,ck);
			d=flag[K].y-flag[1].y;
			sort(flag+K+1,flag+n+1,ck);
			e=flag[n].y-flag[K+1].y;
			if(b*d+c*e<ans)
				ans=b*d+c*e;
			sort(flag+1,flag+n+1,cp);
		}
		fout<<ans<<endl;
		return 0;
	}
	if(k==3)
	{
		sort(a+1,a+n+1,cp);
		for(i=1;i<=n;i++)
		{
			flag[i].x=a[i].x;
		    flag[i].y=a[i].y;
		}
		for(i=1;i<=n;i++)
		{
			while(a[++K].x<=a[i].x){}
			K--;
			if(K>=n)
				break;
			P=K;
			b=a[K].x-a[1].x;
			sort(flag+1,flag+K+1,ck);
			f=flag[K].y-flag[1].y;
			for(p=i+1;p<=n;p++)
			{
			while(a[++P].x<=a[p].x){}
			P--;
			if(P>=n)
				break;
			c=a[P].x-a[K+1].x;
			sort(flag+K+1,flag+P+1,ck);
			j=flag[P].y-flag[K+1].y;
			sort(flag+P+1,flag+n+1,ck);
			d=a[n].x-a[P+1].x;
			h=flag[n].y-flag[P+1].y;
			if(b*f+c*j+d*h<ans)
				ans=b*f+c*j+d*h;
			sort(flag+1,flag+n+1,cp);
			}
		}
		fout<<ans<<endl;
	}
	if(k==4)
	{
		sort(a+1,a+n+1,cp);
		for(i=1;i<=n;i++)
		{
			flag[i].x=a[i].x;
		    flag[i].y=a[i].y;
		}	
		for(i=1;i<=n;i++)
		{
			while(a[++K].x<=a[i].x){}
			K--;
			if(K>=n)
				break;
			P=K;
			b=a[K].x-a[1].x;
			sort(flag+1,flag+n+1,cp);
			sort(flag+1,flag+K+1,ck);
			f=flag[K].y-flag[1].y;
			for(p=i+1;p<=n;p++)
			{
			while(a[++P].x<=a[p].x){}
			P--;
			F=P;
			if(P>=n)
				break;
			c=a[P].x-a[K+1].x;
			sort(flag+K+1,flag+P+1,ck);
			j=flag[P].y-flag[K+1].y;
			/////////////////////////OvO
			for(k=p+1;k<=n;k++)
			{
				while(a[++F].x<=a[k].x){}
				F--;
				if(F>=n)
					break;
				/////////////////
			    sort(flag+P+1,flag+F+1,ck);
			    d=a[F].x-a[P+1].x;
			    h=flag[F].y-flag[P+1].y;
				///////////////////
				sort(flag+F+1,flag+n+1,ck);
				q=a[n].x-a[F+1].x;
				w=flag[n].y-flag[F+1].y;
			    if(b*f+c*j+d*h+q*w<ans)
				ans=b*f+c*j+d*h+q*w;
			    sort(flag+1,flag+n+1,cp);
			}
		    }
		}
		fout<<ans<<endl;
	}		
	return 0;
}