$O(rc)$ // r,c는 차
좌표 (x,y)에 있을 숫자를 상수시간에 구하는 함수 f(x,y)를 이용한다.
#include<cstdio> int a[50][50], r1, c1, r2, c2, m, s; int main() { scanf("%d%d%d%d", &r1, &c1, &r2, &c2); for (int i = r1; i <= r2; i++) { for (int j = c1; j <= c2; j++) { int x = i - r1, y = j - c1; if (i - j<0) { if (i + j < 0) a[x][y] = 4 * i*i + i + 1 - j; else a[x][y] = 4 * j*j - 3 * j + 1 - i; } else { if (i + j < 0) a[x][y] = 4 * j*j - j + 1 + i; else a[x][y] = 4 * i*i + 3 * i + 1 + j; } if (a[x][y]>m) m = a[x][y]; } } for (; m; m /= 10) s++; for (int i = 0; i <= r2 - r1; i++) { for (int j = 0; j <= c2 - c1; j++) printf("%*d ", s, a[i][j]); puts(""); } return 0; }
댓글 없음 :
댓글 쓰기