窝妖达安 #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 条评论

目前还没有评论...