ACM준비/algospot

IMGFILTER

조규현15 2015. 9. 10. 18:29
반응형

https://algospot.com/judge/problem/read/IMGFILTER

 

algospot.com :: IMGFILTER

Image Filter 문제 정보 문제 알고리즘 대회를 준비할 때면, 출제진은 서로 데이터를 교환하고 검증하는 작업을 거치게 된다. 높이맵(heightmap)을 활용한 문제를 내던 B모씨는 데이터를 모두 만들었고

algospot.com

문제 이해가 오래걸렸음.

문제 그대로 해결함.

#include 
#define abs(a)(((a) < (0))?-(a):(a))

int MAP[100][100];
int R, C;

int Get(int r, int c)
{
	if (r < 0 || c < 0)
		return 0;
	else
		return MAP[r][c];
}
int Type(int type, int r, int c)
{
	switch (type)
	{
	case 0:
		return 0;
	case 1:
		return Get(r, c - 1);
	case 2:
		return Get(r - 1, c);
	case 3:
		return (Get(r, c - 1) + Get(r - 1, c)) / 2;
	case 4:
		return Get(r - 1, c) + Get(r, c - 1) - Get(r - 1, c - 1);
	}
}
void Cal(int r, int c)
{
	int T0 = abs(MAP[r][c] - Type(0, r, c));
	int T1 = abs(MAP[r][c] - Type(1, r, c));
	int T2 = abs(MAP[r][c] - Type(2, r, c));
	int T3 = abs(MAP[r][c] - Type(3, r, c));
	int T4 = abs(MAP[r][c] - Type(4, r, c));

	int index = 0;
	int smallest = T0;

	if (smallest > T1){ index = 1; smallest = T1; }
	if (smallest > T2){ index = 2; smallest = T2; }
	if (smallest > T3){ index = 3; smallest = T3; }
	if (smallest > T4){ index = 4;}

	printf("%d %d%c", index, MAP[r][c] - Type(index, r, c), c != C - 1 ? ' ' : '\n');
}
int main()
{
	int T;
	for (scanf("%d", &T); T > 0; T--)
	{
		scanf("%d %d", &R, &C);

		for (int i = 0; i < R;i++)
		for (int j = 0; j < C; j++)
			scanf("%d", &MAP[i][j]);

		for (int i = 0; i < R; i++)
		for (int j = 0; j < C; j++)
			Cal(i, j);
	}
	return 0;
}
반응형

'ACM준비 > algospot' 카테고리의 다른 글

GGGCCCDDD  (0) 2015.09.11
JEONGLIBE  (0) 2015.09.11
JOSEPHUS  (0) 2015.09.10
FIXPAREN  (0) 2015.09.10
POTION  (0) 2015.09.10