比赛 |
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;
}