- 五校联考重交
谁有答案
- @ 2026-3-25 15:26:05
窝妖达安 #include using namespace std;
const int MAX = 1e5 + 5;
int op[MAX], x[MAX], y[MAX], l[MAX]; int n, q, d;
// 核心:正确的逆旋转函数 void rotate_back(int &dx, int &dy, int o, int sx, int sy, int len) { int rx = dx - sx; int ry = dy - sy; int tmp;
if (o == 1) {
// 原操作:顺时针 → 逆操作:逆时针
tmp = rx;
rx = len - 1 - ry;
ry = tmp;
} else {
// 原操作:逆时针 → 逆操作:顺时针
tmp = rx;
rx = ry;
ry = len - 1 - tmp;
}
dx = sx + rx;
dy = sy + ry;
}
int main() { ios::sync_with_stdio(false); cin.tie(0);
cin >> n;
cin >> q;
for (int i = 1; i <= q; ++i) {
cin >> op[i] >> x[i] >> y[i] >> l[i];
}
cin >> d;
while (d--) {
int dx, dy;
cin >> dx >> dy;
// 倒序还原
for (int i = q; i >= 1; --i) {
int sx = x[i], sy = y[i], len = l[i];
if (dx >= sx && dx <= sx + len - 1 && dy >= sy && dy <= sy + len - 1) {
rotate_back(dx, dy, op[i], sx, sy, len);
}
}
cout << (dx - 1) * n + dy << '\n';
}
return 0;
}
第二题
0 条评论
目前还没有评论...