프로그래밍 알고리즘
[정올 1264] 마법색종이
꾸준한사람
2023. 1. 3. 01:41
반응형
http://www.jungol.co.kr/bbs/board.php?bo_table=pbank&code=1264&sca=99
JUNGOL
www.jungol.co.kr
#include <stdio.h>
int X, Y, N;
enum {
W = 0,
B,
};
struct P {
int x, y;
};
struct CP {
P s, e;
int color;
};
CP Que[100000];
int sp, MaxArea, MinArea = 40000 * 40000;
void push_back(CP c) {
Que[sp++] = c;
}
int Get(int myx, int myy) {
for (int i = 0; i < sp; i++) {
P s = Que[i].s;
P e = Que[i].e;
if (myx >= e.x || myx <= s.x || myy >= e.y || myy <= s.y)
continue;
return i;
}
return -1;
}
void Process(int idx, int inx, int iny) {
CP& rSelC = Que[idx], newC;
if (rSelC.color == W) {
rSelC.color = newC.color = B;
newC.e = rSelC.e;
rSelC.e.y = iny;
newC.s.x = rSelC.s.x;
newC.s.y = iny;
push_back(newC);
}
else {
rSelC.color = newC.color = W;
newC.e = rSelC.e;
rSelC.e.x = inx;
newC.s.x = inx;
newC.s.y = rSelC.s.y;
push_back(newC);
}
}
int main(void) {
scanf("%d %d", &X, &Y);
scanf("%d", &N);
CP myc;
int mycolor, inx, iny, idx, area;
myc.s.x = 0, myc.s.y = 0;
myc.e.x = X, myc.e.y = Y;
myc.color = W;
push_back(myc);
for (int i = 0; i < N; i++) {
scanf("%d %d", &inx, &iny);
idx = Get(inx, iny);
Process(idx, inx, iny);
}
for (int i = 0; i < sp; i++)
{
inx = Que[i].e.x - Que[i].s.x;
iny = Que[i].e.y - Que[i].s.y;
area = inx * iny;
if (MaxArea < area) MaxArea = area;
if (MinArea > area) MinArea = area;
}
printf("%d %d\n", MaxArea, MinArea);
return 0;
}
반응형