#include<bits/stdc++.h>
using namespace std;
int main() {
int hh, w, t, p;
while (cin >> w >> hh >> t >> p, w) {
int res[40][40];
for (int i = 0; i < 40; i++) for (int j = 0; j < 40; j++) res[i][j] = 0;
for (int i = 0; i < hh; i++) for (int j = 0; j < w; j++) res[i][j] = 1;
for (int ii = 0; ii < t; ii++) {
int d, c; cin >> d >> c;
int tmp[40][40];
for (int i = 0; i < 40; i++) for (int j = 0; j < 40; j++) tmp[i][j] = 0;
if (d == 1) {
for (int i = 0; i < 40; i++) {
for (int j = c; j < 40; j++) {
tmp[i][j - c] += res[i][j];
}
}
for (int i = 0; i < 40; i++) {
for (int j = c - 1; j >= 0; j--) {
tmp[i][c - 1 - j] += res[i][j];
}
}
} else {
int h = 0;
for (int i = 0; i < 40; i++) {
if (res[i][0] != 0) h++;
}
if (c >= h - c) {
for (int i = h - 1; i >= h - c; i--) {
for (int j = 0; j < 40; j++) {
tmp[h - 1 - i][j] += res[i][j];
}
}
for (int i = 0; i < h - c; i++) {
for (int j = 0; j < 40; j++) {
tmp[i + 2 * c - h][j] += res[i][j];
}
}
} else {
for (int i = 0; i < h - c; i++) {
for (int j = 0; j < 40; j++) {
tmp[i][j] += res[i][j];
}
}
int now = c;
for (int i = h - 1; i >= h - c; i--) {
for (int j = 0; j < 40; j++) {
tmp[i - 2 * now + 1][j] += res[i][j];
}
now--;
}
}
}
for (int i = 0; i < 40; i++) {
for (int j = 0; j < 40; j++) {
res[i][j] = tmp[i][j];
}
}
int hlen = 0;
for (int i = 0; i < 40; i++) {
if (res[i][0] != 0) hlen++;
}
for (int i = 0; i < p; i++) {
int x, y; cin >> x >> y;
cout << res[hlen - 1 - y][x] << endl;
}
}
}
- 何かいうとしたら、「ただただ面倒くさいことをする」に尽きるかと思います。
- 難しいことはやっていないんですけど、バグると時間を食う系の問題というか、どれだけ集中して実装できるかみたいなのが重要なのかなーと。
- 考察の段階で要所の紙コーディングまでして完全に詰めきってから実装しました。