www.acmicpc.net/problem/1022

 

1022번: 소용돌이 예쁘게 출력하기

첫째 줄에 r1, c1, r2, c2가 주어진다. 모두 절댓값이 5000보다 작거나 같은 정수이고, r2-r1은 0보다 크거나 같고, 49보다 작거나 같으며, c2-c1은 0보다 크거나 같고, 4보다 작거나 같다.

www.acmicpc.net

 

[난이도] Gold4

[유형] 구현

 

[풀이]

소용돌이의 오른쪽 아래 꼭지점은 (2*n+1)^2 라는점을 이용

 

 

#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
int r1,r2,c1,c2;
int getV(int r,int c){
int a = max(abs(r),abs(c));
int v = (2*a+1);
v*=v;
if(a==r) return v-(a-c);
v-=2*a;
if(-a==c) return v-(a-r);
v-=2*a;
if(-a==r) return v-(a+c);
v-=2*a;
return v-(a+r);
}
int main(){
scanf("%d%d%d%d",&r1,&c1,&r2,&c2);
int k = 0;
for(int i=r1;i<=r2;i++){
for(int j=c1;j<=c2;j++){
int v = getV(i,j);
k = max(v,k);
}
}
int t = 0;
while(k>0){
t++;
k/=10;
}
for(int i=r1;i<=r2;i++){
for(int j=c1;j<=c2;j++){
printf("%*d ",t,getV(i,j));
}
puts("");
}
}

github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Gold4/1022.cpp

+ Recent posts