Baek Junアルゴリズム16935号:回転アレイ3
28884 ワード
リンク
https://www.acmicpc.net/problem/16935
sol 1)実施
https://www.acmicpc.net/problem/16935
sol 1)実施
#pragma GCC target("avx,avx2,fma")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#include <bits/stdc++.h>
#define fastio ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)
#define int int64_t
using namespace std;
int board[100][100],board2[100][100],n,m,r;
void upsideDown(){
for(int i = 0; i < n; i++) for(int j = 0; j < m; j++) board[i][j] = board2[n - 1 - i][j];
}
void leftToRight(){
for(int i = 0; i < n; i++) for(int j = 0; j < m; j++) board[i][j] = board2[i][m - 1 - j];
}
void rightRotate(){
swap(m,n);
for(int i = 0; i < n; i++) for(int j = 0; j < m; j++) board[i][j] = board2[m - 1 - j][i];
}
void leftRotate(){
swap(m,n);
for(int i = 0; i < n; i++) for(int j = 0; j < m; j++) board[i][j] = board2[j][n - 1 - i];
}
void rotateArea(){
// 1번을 2번으로
for(int i = 0; i < n >> 1; i++) for(int j = 0; j < m >> 1; j++){
board[i][m / 2 + j] = board2[i][j];
}
// 2번을 3번으로
for(int i = 0; i < n >> 1; i++) for(int j = m >> 1; j < m; j++){
board[i + n / 2][j] = board2[i][j];
}
// 3번을 4번으로
for(int i = n >> 1; i < n; i++) for(int j = m >> 1; j < m; j++){
board[i][j - m / 2] = board2[i][j];
}
// 4번을 1번으로
for (int i = 0; i < n >> 1; i++) for (int j = 0; j < m >> 1; j++) {
board[i][j] = board2[i + n / 2][j];
}
}
void reverseRotateArea(){
// 1번을 4번으로
for(int i = 0; i < n >> 1; i++) for(int j = 0; j < m >> 1; j++){
board[i + n / 2][j]= board2[i][j];
}
// 4번을 3번으로
for(int i = n >> 1; i < n; i++) for(int j = 0; j < m >> 1; j++){
board[i][j + m / 2] = board2[i][j];
}
// 3번을 2번으로
for(int i = n >> 1; i < n; i++) for(int j = m >> 1; j < m; j++){
board[i - n / 2][j] = board2[i][j];
}
// 2번을 1번으로
for(int i = 0; i < n >> 1; i++) for(int j = m >> 1; j < m; j++){
board[i][j - m / 2] = board2[i][j];
}
}
int32_t main(){
fastio;
cin >> n >> m >> r;
for(int i = 0; i < n; i++) for(int j = 0; j < m; j++) cin >> board[i][j];
while(r--){
int q; cin >> q;
for(int i = 0; i < n; i++) for(int j = 0; j < m; j++) board2[i][j] = board[i][j];
if(q == 1) upsideDown();
else if(q == 2) leftToRight();
else if(q == 3) rightRotate();
else if(q == 4) leftRotate();
else if(q == 5) rotateArea();
else if(q == 6) reverseRotateArea();
}
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
cout << board[i][j] << ' ';
}
cout << "\n";
}
}
問題に書いてある通りに実施すればいいだけです.Reference
この問題について(Baek Junアルゴリズム16935号:回転アレイ3), 我々は、より多くの情報をここで見つけました https://velog.io/@inwooleeme/백준-알고리즘-16935번-배열-돌리기-3テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol