RE 20pts!!!萌新求助
查看原帖
RE 20pts!!!萌新求助
413370
florence25楼主2023/6/21 22:27
#include <bits/stdc++.h>

using namespace std;

const int maxn = 100 + 5;
int n, k, ans = 250000 + 5, px[maxn], py[maxn];
struct mat {
	int lx, ly, rx, ry;
	int flag;
} mt[10];

int check() {
	for (int i = 1; i <= k; ++ i)
		for (int j = i + 1; j <= k; ++ j) {
			if (mt[i].lx >= mt[j].lx && mt[i].lx <= mt[j].rx && mt[i].ly <= mt[j].ry && mt[i].ly >= mt[j].ly) return 0;
			else if (mt[i].lx >= mt[j].lx && mt[i].lx <= mt[j].rx && mt[i].ry <= mt[j].ry && mt[i].ry >= mt[j].ly) return 0;
			else if (mt[i].rx >= mt[j].lx && mt[i].rx <= mt[j].rx && mt[i].ry <= mt[j].ry && mt[i].ry >= mt[j].ly) return 0;
			else if (mt[i].rx >= mt[j].lx && mt[i].rx <= mt[j].rx && mt[i].ly <= mt[j].ry && mt[i].ly >= mt[j].ly) return 0;
		}
	return 1;
}

void add(int i, int id) {
	if (!mt[i].flag) {
		mt[i].flag = 1;
		mt[i].lx = mt[i].rx = px[id];
		mt[i].ly = mt[i].ry = py[id];
	}
	else {
		if (px[id] < mt[i].lx) mt[i].lx = px[id];
		else if (px[id] > mt[i].rx) mt[i].rx = px[id];
		if (py[id] < mt[i].ly) mt[i].ly = py[id];
		else if (py[id] > mt[i].ry) mt[i].ry = py[id];
	}
}

int clac(mat a) {
	if (!a.flag) return 0;
	return (a.rx - a.lx) * (a.ry - a.ly);
}

void dfs(int id, int sqa) {
	if (sqa > ans) return ;
	if (id == n + 1) {
		if (check())
			if (ans > sqa) {
				ans = sqa; return ;
			}
	}
	mat kpl;
	for (int i = 1; i <= k; ++ i) {
		kpl = mt[i];
		add(i, id);
		dfs(id + 1, sqa - clac(kpl) + clac(mt[i]));
		mt[i] = kpl;
	}
}

void read() {
	scanf("%d%d", &n, &k);
	for (int i = 1; i <= n; ++ i)
		scanf("%d%d", &py[i], &px[i]);
	dfs(1, 0);
	printf("%d\n", ans);
}

int main() {
	read();
	return 0;
}

/*
4 2
0 1
1 3
2 0
3 2
*/
2023/6/21 22:27
加载中...