アルゴリズム::白準::シミュレーション:::16927::回転アレイ2
15997 ワード
質問する
質問へのアクセス
問題を理解する
コード#コード#
#include <iostream>
#include <vector>
using namespace std;
int main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int N, M, R;
cin >> N >> M >> R;
vector<vector<int>> a(N, vector<int>(M));
for (int y = 0; y < N; ++y)
for (int x = 0; x < M; ++x)
cin >> a[y][x];
int ng = min(N, M) / 2;
vector<vector<int>> groups;
for (int g = 0; g < ng; ++g) {
vector<int> group;
int xmax = M - g - 1, ymax = N - g - 1;
for (int x = g; x < xmax; ++x) group.push_back(a[g][x]);
for (int y = g; y < ymax; ++y) group.push_back(a[y][xmax]);
for (int x = xmax; x > g; --x) group.push_back(a[ymax][x]);
for (int y = ymax; y > g; --y) group.push_back(a[y][g]);
groups.push_back(group);
}
for (int g = 0; g < ng; ++g) {
vector<int> &group = groups[g];
int len = group.size(), idx = R % len;
int xmax = M - g - 1, ymax = N - g - 1;
for (int x = g; x < xmax; ++x, idx = (idx + 1) % len) a[g][x] = group[idx];
for (int y = g; y < ymax; ++y, idx = (idx + 1) % len) a[y][xmax] = group[idx];
for (int x = xmax; x > g; --x, idx = (idx + 1) % len) a[ymax][x] = group[idx];
for (int y = ymax; y > g; --y, idx = (idx + 1) % len) a[y][g] = group[idx];
}
for (int y = 0; y < N; ++y) {
for (int x = 0; x < M; ++x)
cout << a[y][x] << ' ';
cout << '\n';
}
}
結果
Reference
この問題について(アルゴリズム::白準::シミュレーション:::16927::回転アレイ2), 我々は、より多くの情報をここで見つけました https://velog.io/@embeddedjune/알고리즘-백준-시뮬레이션-16927-배열-돌리기2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol