比赛 |
2024暑假C班集训9 |
评测结果 |
AAAAAAA |
题目名称 |
矩形覆盖 |
最终得分 |
100 |
用户昵称 |
小金 |
运行时间 |
0.511 s |
代码语言 |
C++ |
内存使用 |
1.64 MiB |
提交时间 |
2024-07-09 11:39:10 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n,k,x[55],y[55],ans=0x3f3f3f3f;
struct jx{
int lx,ly,rx,ry;
bool flag;
void add(int x,int y)
{
if(!flag)
{
lx=x;
rx=x;
ly=y;
ry=y;
flag=1;
}
else
{
if(x<lx) lx=x;
else if(x>rx) rx=x;
if(y>ly) ly=y;
else if(y<ry) ry=y;
}
}
bool injx(int x,int y) const
{
return lx<=x&&x<=rx&&ry<=y&&y<=ly;
}
int operator()()
{
if(!flag) return 0;
return (rx-lx)*(ly-ry);
}
bool operator*(const jx&o)
{
if(!flag||!o.flag) return 0;
return o.injx(lx,ly)||o.injx(lx,ry)||o.injx(rx,ly)||o.injx(rx,ry);
}
}a[5];
bool check()
{
for(int i=1;i<=k;i++)
{
for(int j=i+1;j<=k;j++)
{
if(a[i]*a[j]) return 0;
}
}
return 1;
}
void dfs(int d,int area)
{
if(area>=ans) return;
if(d==n+1)
{
if(check())
{
if(ans>area) ans=area;
}
return;
}
jx now;
for(int j=1;j<=k;j++)
{
now=a[j];
a[j].add(x[d],y[d]);
dfs(d+1,area-now()+a[j]());
a[j]=now;
}
}
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",&x[i],&y[i]);
}
dfs(1,0);
printf("%d",ans);
return 0;
}