这是到现在最让我烦恼的一题了:
不说了,贴一下别人的代码:
#include <stdio.h> int curr_color, n, s[1001] = {}, x1[1000], y1[1000], x2[1000], y2[1000], color[1000]; void Cut(int k, int a, int b, int c, int d) { while (k < n && (a >= x2[k] || c <= x1[k] || b >= y2[k] || d <= y1[k])) ++k; if (k == n) s[curr_color] += (c-a)*(d-b); else { if (a < x1[k]) Cut(k+1, a, b, x1[k], d), a = x1[k]; if (c > x2[k]) Cut(k+1, x2[k], b, c, d), c = x2[k]; if (b < y1[k]) Cut(k+1, a, b, c, y1[k]); if (d > y2[k]) Cut(k+1, a, y2[k], c, d); } } int main() { int max_color = 1, maxx, maxy; freopen("rect1.in", "r", stdin); freopen("rect1.out", "w", stdout); scanf("%d%d%d", &maxx, &maxy, &n); for (int i = 0; i < n; ++i) scanf("%d%d%d%d%d", &x1[i], &y1[i], &x2[i], &y2[i], &color[i]); for (int i = n; --i >= 0; ) { curr_color = color[i]; if (curr_color > max_color) max_color = curr_color; Cut(i+1, x1[i], y1[i], x2[i], y2[i]); } curr_color = 1; Cut(0, 0, 0, maxx, maxy); for (int i = 1; i <= max_color; ++i) if (s[i]) printf("%d %d/n", i, s[i]); }