Skip to content

Instantly share code, notes, and snippets.

@surinoel
Created October 2, 2019 11:25
Show Gist options
  • Save surinoel/3edc3ae89e97977a6cdb2507c2d599f2 to your computer and use it in GitHub Desktop.
Save surinoel/3edc3ae89e97977a6cdb2507c2d599f2 to your computer and use it in GitHub Desktop.
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int n, m, r;
int mat[100][100];
int tmat[100][100];
void go1(void) {
memcpy(tmat, mat, sizeof(mat));
for (int i = 0; i < n; i++) {
memcpy(mat[i], tmat[n - 1 - i], sizeof(mat[i]));
}
}
void go2(void) {
memcpy(tmat, mat, sizeof(mat));
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
mat[i][j] = tmat[i][m - 1 - j];
}
}
}
void go3(void) {
int tn = m, tm = n;
memcpy(tmat, mat, sizeof(mat));
for (int i = 0; i < tn; i++) {
for (int j = 0; j < tm; j++) {
mat[i][j] = tmat[n - 1 - j][i];
}
}
swap(n, m);
}
void go4(void) {
int tn = m, tm = n;
memcpy(tmat, mat, sizeof(mat));
for (int i = 0; i < tn; i++) {
for (int j = 0; j < tm; j++) {
mat[i][j] = tmat[j][m - i - 1];
}
}
swap(n, m);
}
void go5(void) {
memcpy(tmat, mat, sizeof(mat));
for (int i = 0; i < n / 2; i++) {
for (int j = m / 2; j < m; j++) {
mat[i][j] = tmat[i][j - m / 2];
}
}
for (int i = n / 2; i < n; i++) {
for (int j = m / 2; j < m; j++) {
mat[i][j] = tmat[i - n / 2][j];
}
}
for (int i = n / 2; i < n; i++) {
for (int j = 0; j < m / 2; j++) {
mat[i][j] = tmat[i][j + m / 2];
}
}
for (int i = 0; i < n / 2; i++) {
for (int j = 0; j < m / 2; j++) {
mat[i][j] = tmat[i + n / 2][j];
}
}
}
void go6(void) {
memcpy(tmat, mat, sizeof(mat));
for (int i = n / 2; i < n; i++) {
for (int j = 0; j < m / 2; j++) {
mat[i][j] = tmat[i - n / 2][j];
}
}
for (int i = 0; i < n / 2; i++) {
for (int j = 0; j < m / 2; j++) {
mat[i][j] = tmat[i][j + m / 2];
}
}
for (int i = 0; i < n / 2; i++) {
for (int j = m / 2; j < m; j++) {
mat[i][j] = tmat[i + n / 2][j];
}
}
for (int i = n / 2; i < n; i++) {
for (int j = m / 2; j < m; j++) {
mat[i][j] = tmat[i][j - m / 2];
}
}
}
int main(void) {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> m >> r;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> mat[i][j];
}
}
while (r--) {
int cmd;
cin >> cmd;
if (cmd == 1) go1();
else if (cmd == 2) go2();
else if (cmd == 3) go3();
else if (cmd == 4) go4();
else if (cmd == 5) go5();
else if (cmd == 6) go6();
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cout << mat[i][j] << ' ';
}
cout << '\n';
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment