알고리즘

[알고리즘] 백준 1022 - 소용돌이 예쁘게 출력하기

blueberrysoda 2024. 8. 4. 13:01
#include <iostream>
using namespace std;

int init(int a, int b){
    int n = max(abs(a), abs(b));
    int v = 2 * n + 1;
    v *= v;

    int d = 2 * n;
    if(a == n){
        return v - n + b;
    }
    v -= d;

    if(b == -n){
        return v - n + a;
    }
    v -= d;

    if(a == -n){
        return v - b - n;
    }
    v -= d;

    return v - a - n;
}

int cal(int v){
    return v ? cal(v / 10) + 1 : 0;
}

int main(){
    int y1, x1, y2, x2;
    cin >> y1 >> x1 >> y2 >> x2;

    int tmp = 0;

    for(int i=y1; i<=y2; i++){
        for(int j=x1; j<=x2; j++){
            tmp = max(tmp, cal(init(i, j)));
        }
    }

    for(int i=y1; i<=y2; i++){
        for(int j=x1; j<=x2; j++){
            cout.width(tmp);
            cout << std::right << init(i, j) << " ";
        }
        cout << "\n";
    }

    return 0;
}