大样例全过,本地编译没问题,但 at 测评全Re,似乎是变量名的问题,注释 work 函数后全 Wa
#include <bits/stdc++.h>
#define N (int)(2e5+2)
#define ll long long
using namespace std;
int n, m, q, x[N], y[N], opt[N], p[N];
struct question {
int id, A, B;
} ques[N];
bool tmp, change, digital_x, digital_y;
ll pls_tmp, pls_x, pls_y, ans_x[N], ans_y[N];
inline bool cmp(question i, question j) {
return i.A < j.A;
}
inline ll work(int i) {
if(opt[i] == 1) {
change = !change;
tmp = digital_x;
digital_x = digital_y;
digital_y = !tmp;
pls_tmp = pls_x;
pls_x = pls_y;
pls_y = -pls_tmp;
} else if(opt[i] == 2) {
change = !change;
tmp = digital_x;
digital_x = !digital_y;
digital_y = tmp;
pls_tmp = pls_x;
pls_x = -pls_y;
pls_y = pls_tmp;
} else if(opt[i] == 3) {
digital_x = !digital_x;
pls_x = -pls_x + (p[i]<<1);
} else {
digital_y = !digital_y;
pls_y = -pls_y + (p[i]<<1);
}
}
inline ll query_x(int i) {
ll ret = change ? y[i]:x[i];
ret = digital_x ? -ret:ret;
return ret + pls_x;
}
inline ll query_y(int i) {
ll ret = change ? x[i]:y[i];
ret = digital_y ? -ret:ret;
return ret + pls_y;
}
int main() {
scanf("%d", &n);
for(int i=1; i<=n; i++)
scanf("%d%d", x+i, y+i);
scanf("%d", &m);
for(int i=1; i<=m; i++) {
scanf("%d", opt+i);
if(opt[i]==3 || opt[i]==4)
scanf("%d", p+i);
}
scanf("%d", &q);
for(int i=1; i<=q; i++) {
ques[i].id = i;
scanf("%d%d", &ques[i].A, &ques[i].B);
}
sort(ques+1, ques+1+q, cmp);
for(int i=1, j=0; i<=q; i++) {
while(j < ques[i].A)
work(++j);
ans_x[ques[i].id] = query_x(ques[i].B);
ans_y[ques[i].id] = query_y(ques[i].B);
}
for(int i=1; i<=q; i++)
printf("%lld %lld\n", ans_x[i], ans_y[i]);
return 0;
}