반응형
https://algospot.com/judge/problem/read/IMGFILTER
문제 이해가 오래걸렸음.
문제 그대로 해결함.
#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;
}
반응형