[伯準1022]きれいな渦を出力
渦1022を見事に出力
各座標におけるディジタルルックアップ式が得られ,より速く解くことができるが,直接シミュレーションして解くことができると考えられるので,シミュレーションで解く.総サイズは10000×100000なので、全て保存するよりも50 x 5を出力する方が良いので、保存して出力するだけです.
数字を埋め込むルールは、5桁の左芽順に方向を切り替え、2回切り替えるたびに移動の長さが1つ増えます.1回目の移動の長さは1で、開始方向は右側です.r 1~r 2,c 1~c 2の範囲がすべて満たされていれば、繰返しを停止し、出力すればよい.
出力バーを調整するために、
を選択します。
구현
に答える
各座標におけるディジタルルックアップ式が得られ,より速く解くことができるが,直接シミュレーションして解くことができると考えられるので,シミュレーションで解く.総サイズは10000×100000なので、全て保存するよりも50 x 5を出力する方が良いので、保存して出力するだけです.
数字を埋め込むルールは、5桁の左芽順に方向を切り替え、2回切り替えるたびに移動の長さが1つ増えます.1回目の移動の長さは1で、開始方向は右側です.r 1~r 2,c 1~c 2の範囲がすべて満たされていれば、繰返しを停止し、出力すればよい.
出力バーを調整するために、
setw
という関数が使用されます.コード#コード#
#include <bits/stdc++.h>
const int dx[4] = { 1,0,-1,0 };
const int dy[4] = { 0,-1,0,1 };
using namespace std;
int arr[50][5];
int main() {
cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(false);
int r1, c1, r2, c2;
cin >> r1 >> c1 >> r2 >> c2;
int x = 0, y = 0, cnt = 1, i = 1, d = 0, value = 0, c = 0, M = 0;
if (x <= c2 && x >= c1 && y <= r2 && y >= r1) {
arr[y - r1][x - c1] = cnt;
M = max(M, cnt);
c++;
}
if (c != ((r2 - r1 + 1) * (c2 - c1 + 1))) {
while (true) {
if (value == 2) {
i++; value = 0;
}
for (int j = 0; j < i; j++) {
cnt++;
x += dx[d];
y += dy[d];
if (x <= c2 && x >= c1 && y <= r2 && y >= r1) {
arr[y - r1][x - c1] = cnt;
M = max(M, cnt);
c++;
if (c == ((r2 - r1 + 1) * (c2 - c1 + 1))) break;
}
}
if (c == ((r2 - r1 + 1) * (c2 - c1 + 1))) break;
d = (d + 1) % 4;
value++;
}
}
int space = 0;
while (M != 0) {
M /= 10;
space++;
}
for (int k = 0; k <= r2 - r1; k++) {
for (int l = 0; l <= c2 - c1; l++) {
cout << setw(space) << arr[k][l] << ' ';
}
cout << '\n';
}
return 0;
}
Reference
この問題について([伯準1022]きれいな渦を出力), 我々は、より多くの情報をここで見つけました https://velog.io/@asdsa2134/백준-1022-소용돌이-예쁘게-출력하기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol