比赛 2024暑假C班集训9 评测结果 AAAATTA
题目名称 矩形覆盖 最终得分 71
用户昵称 AeeE5x 运行时间 2.716 s
代码语言 C++ 内存使用 3.28 MiB
提交时间 2024-07-09 10:26:38
显示代码纯文本
#include<iostream>
#include<cstring>
#include<vector>
#include<algorithm>
#define ll long long
using namespace std;
int n,k;
struct nod{
	int x,y;
	bool operator<(const nod&a){
		if(x!=a.x) return x<a.x;
		return y<a.y;
	}
}lis[55];
vector<int> ve[4];
nod sk[4][2];
bool g(){
	for(int u=0;u<k;u++){
		int lux=0x3f3f3f3f,luy=0x3f3f3f3f,rdx=-1,rdy=-1;
		for(int i=0;i<ve[u].size();i++){
			lux=min(lux,lis[ve[u][i]].x);
			luy=min(luy,lis[ve[u][i]].y);
			rdx=max(rdx,lis[ve[u][i]].x);
			rdy=max(rdy,lis[ve[u][i]].y);
		}
		if(ve[u].size()==0){
			sk[u][0].x=sk[u][1].x=sk[u][0].y=sk[u][1].y=0;
			continue;
		}
		sk[u][0].x=lux;
		sk[u][0].y=luy;
		sk[u][1].x=rdx;
		sk[u][1].y=rdy;
	}
	for(int i=0;i<k;i++){
		for(int j=0;j<i;j++){
			int lu1x=sk[i][0].x,lu1y=sk[i][0].y;
			int rd1x=sk[i][1].x,rd1y=sk[i][1].y;
			int lu2x=sk[j][0].x,lu2y=sk[j][0].y;
			int rd2x=sk[j][1].x,rd2y=sk[j][1].y;
			if((lu1x>=lu2x&&lu1x<=rd2x&&lu1y>=lu2y&&lu1y<=rd2y)||(rd1x>=lu2x&&rd1x<=rd2x&&rd1y>=lu2y&&rd1y<=rd2y)||(lu2x>=lu1x&&lu2x<=rd1x&&lu2y>=lu1y&&lu2y<=rd1y)||(rd2x>=lu1x&&rd2x<=rd1x&&rd2y>=lu1y&&rd2y<=rd1y)) return false;
			if((lu1x>=lu2x&&lu1x<=rd2x&&rd1y>=lu2y&&rd1y<=rd2y)||(rd1x>=lu2x&&rd1x<=rd2x&&lu1y>=lu2y&&lu1y<=rd2y)||(lu2x>=lu1x&&lu2x<=rd1x&&lu2y>=rd1y&&rd2y<=rd1y)||(rd2x>=lu1x&&rd2x<=rd1x&&lu2y>=lu1y&&lu2y<=rd1y)) return false;
		}
	}
	return true;
}
int ans=0x3f3f3f3f;
void f(int x){
	if(x==n+1){
		if(g()){
			int sum=0;
			for(int u=0;u<k;u++) sum+=(sk[u][1].x-sk[u][0].x)*(sk[u][1].y-sk[u][0].y);
			ans=min(ans,sum);
		}
		return;
	}
	
	for(int i=0;i<k;i++){
		ve[i].push_back(x);
		f(x+1);
		ve[i].pop_back();
	}
}
int main(){
	freopen("jxfg.in","r",stdin);
	freopen("jxfg.out","w",stdout);
	
	scanf("%d%d",&n,&k);
	for(int i=1;i<=n;i++) scanf("%d%d",&lis[i].x,&lis[i].y);
	f(1);
	printf("%d",ans);
	
	return 0;
}