【USACO题库】3.1.4 Shaping Regions形成的区域

打暴力90.9分!!!

吓得我哈哈大笑

正解dfs即可。

#include<cstdio>
using namespace std;
int a[1010][5],area[1010],n;

void dfs(int x1,int y1,int x2,int y2,int color,int deep)
{
	while (deep<=n && (x1>=a[deep][2] || y1>=a[deep][3] || x2<=a[deep][0] || y2<=a[deep][1])) deep++;
	if (deep>n) {area[color]+=(x2-x1)*(y2-y1);return;}
	if (x1<a[deep][0]) dfs(x1,y1,a[deep][0],y2,color,deep+1),x1=a[deep][0];
	if (y1<a[deep][1]) dfs(x1,y1,x2,a[deep][1],color,deep+1),y1=a[deep][1];
	if (x2>a[deep][2]) dfs(a[deep][2],y1,x2,y2,color,deep+1),x2=a[deep][2];
	if (y2>a[deep][3]) dfs(x1,a[deep][3],x2,y2,color,deep+1),y2=a[deep][3];
}

int main()
{
	//freopen("USACO.in","r",stdin);
	int A,B,i,j,k;
	scanf("%d%d%d",&A,&B,&n);
	for (i=1;i<=n;i++) scanf("%d%d%d%d%d",&a[i][0],&a[i][1],&a[i][2],&a[i][3],&a[i][4]);
	dfs(0,0,A,B,1,1);
	for (i=1;i<=n;i++) dfs(a[i][0],a[i][1],a[i][2],a[i][3],a[i][4],i+1);
	for (i=1;i<=1000;i++)
		if (area[i]) printf("%d %d
",i,area[i]);
	return 0;
}
转载需注明出处。
原文地址:https://www.cnblogs.com/jz929/p/11817705.html