프로그래밍 알고리즘

[정올 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;
}
반응형