题解
题意:n,m的矩形,连续x次顺时针旋转,连续y次水平翻转,连续z次逆时针旋转,告诉你q个点原来的位置,输出最终的位置
旋转的过程中n,m会交换,暴力模拟过程
#include <bits/stdc++.h>
using namespace std;
int n, m, N, M;
int x, y, z, p;
/*
---→ y轴
↓
x轴
顺时针旋转90° (x,y) -> (y,n-x+1)
水平翻转 (x,y) -> (x,m-y+1)
逆时针旋转90° (x,y) -> (m-y+1,x)
*/
int f1(int &a, int &b) { // 顺时针旋转 (a,b) -> (b,n-a+1)
int t = b;
b = n - a + 1;
a = t;
swap(n, m);
}
int f2(int &a, int &b) { // 水平翻转 (a,b) -> (a,m-b+1)
b = m - b + 1;
}
int f3(int &a, int &b) { // 逆时针旋转 (a,b) -> (m-b+1,a)
int t = a;
a = m - b + 1;
b = t;
swap(n, m);
}
int main() {
ios::sync_with_stdio(0);
cin >> N >> M >> x >> y >> z >> p;
x %= 4;
y %= 2;
z %= 4;
for (int i = 1, a, b; i <= p; ++i) {
cin >> a >> b;
//每一次旋转后 n,m都会交换 最后不一定是原来的n,m
n = N;
m = M;
for (int j = 1; j <= x; ++j) f1(a, b);
for (int j = 1; j <= y; ++j) f2(a, b);
for (int j = 1; j <= z; ++j) f3(a, b);
cout << a << " " << b << endl;
}
return 0;
}