比赛 2024暑假C班集训9 评测结果 AAAATTW
题目名称 矩形覆盖 最终得分 57
用户昵称 wdsjl 运行时间 2.878 s
代码语言 C++ 内存使用 3.28 MiB
提交时间 2024-07-09 11:42:52
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;

const int N = 70;

struct node{
    int x;
    int y;
}a[N];

struct sq{
    int l_x;
    int r_x;
    int x_y;
    int s_y;
}b[10];

int n,k,res,c[N],used[N];

int check(){
    for(int i=1;i<=k;i++){
        for(int j=i+1;j<=k;j++){
            if((b[i].r_x-b[i].l_x)+(b[j].r_x-b[j].l_x)<=max(b[i].r_x,b[j].r_x)-min(b[i].l_x,b[j].l_x)&&(b[i].s_y-b[i].x_y)+(b[j].s_y-b[j].x_y)<=max(b[i].s_y,b[j].s_y)-min(b[i].x_y,b[j].x_y)){
            return 1;    
            }
        }      
    }
    return 0;
}

void solve(){
    for(int i=1;i<=k;i++){
        b[i].l_x=501;
        b[i].r_x=-1;
        b[i].s_y=-1;
        b[i].x_y=501;
    }
    for(int i=1;i<=n;i++){
//        cout<<c[i]<<" ";
        b[c[i]].l_x=min(a[i].x,b[c[i]].l_x);
        b[c[i]].r_x=max(a[i].x,b[c[i]].r_x);
        b[c[i]].s_y=max(a[i].y,b[c[i]].s_y);
        b[c[i]].x_y=min(a[i].y,b[c[i]].x_y);
    }
    if(check()==1)return ;
//    cout<<endl;
    int tot=0;
    for(int i=1;i<=k;i++){
//        cout<<endl;
        if(used[i])tot+=(b[i].r_x-b[i].l_x)*(b[i].s_y-b[i].x_y);
//        cout<<"TTT"<<b[i].l_x<<" "<<b[i].r_x<<" "<<b[i].x_y<<" "<<b[i].s_y; 
    }
//    cout<<"TTT"<<tot<<" rrrr"<<res<<endl;
    res=min(res,tot);
}

void dfs(int idx){
    if(idx>n){
        solve();
        return;
    }
    for(int i=1;i<=k;i++){
        c[idx]=i;
        used[i]++;
        dfs(idx+1);
        used[i]--;
        c[idx]=0;
    }
}

int main(){
    freopen("jxfg.in","r",stdin);
    freopen("jxfg.out","w",stdout);
    res=100000;
    scanf("%d%d",&n,&k);
    for(int i=1;i<=n;i++){
        scanf("%d%d",&a[i].x,&a[i].y);
    }
    dfs(1);
    printf("%d\n",res);
    return 0;
}