#include #include #include #include #include #include #define MIN(a,b) (((a)<(b))?(a):(b)) #define MAX(a,b) (((a)>(b))?(a):(b)) #define SQR(x) ((x)*(x)) #ifdef DEBUG #define DBG(x) x #else #define DBG(x) #endif FILE *in; typedef struct Rect { int xmin, xmax, ymin, ymax; } Rect; int inrect (int x, int y, Rect r) { if (x <= r.xmin) return 0; if (x >= r.xmax) return 0; if (y <= r.ymin) return 0; if (y >= r.ymax) return 0; return 1; } Rect slides[100]; int nslides; int on[100][100]; int numon[100]; int onsl[100]; int result[100]; int main () { int kase = 0,printed, i,j,found; in = fopen ("slides.in","r"); assert (in != NULL); while (1) { fscanf (in, "%d", &nslides); if (!nslides) break; for (i=0; i= 0) { DBG(printf ("Found: %d %d\n", mi,mj);) result[mj] = mi; for (i=0; i< nslides; ++i) { if (on[i][mj]) { onsl[mj]--; numon[i]--; on[i][mj] = 0; } if (on[mi][i]) { onsl[i] --; numon[mi] --; on[mi][i] = 0; } } } } } printed = 0; printf ("Heap %d\n", ++kase); for (i=0; i= 0) { if (printed++) printf (" "); printf ("(%c,%d)", 'A'+i, 1+result[i]); } } if (!printed) printf ("none"); printf ("\n\n"); } fclose (in); return 0; }