/* ID: espr1t TASK: KEYWORDS: */ #include #include #include #include #include using namespace std; FILE *in; FILE *out; const int MAX = 1024; int n; int a[MAX][MAX]; int tmp[MAX]; void rotateRow(int idx, int cnt) { for (int i = 0; i < n; i++) tmp[i] = a[idx][i]; while (cnt >= n) cnt -= n; while (-cnt >= n) cnt += n; for (int i = 0; i < n; i++) a[idx][i] = tmp[(i - cnt + n) % n]; } void rotateCol(int idx, int cnt) { for (int i = 0; i < n; i++) tmp[i] = a[i][idx]; while (cnt >= n) cnt -= n; while (-cnt >= n) cnt += n; for (int i = 0; i < n; i++) a[i][idx] = tmp[(i - cnt + n) % n]; } void rotateMainDiag(int row, int col, int cnt) { while (row > 0 && col > 0) row--, col--; int len = 0; while (row < n && col < n) { tmp[len++] = a[row++][col++]; } while (cnt >= len) cnt -= len; while (-cnt >= len) cnt += len; row -= len, col -= len; int idx = 0; while (row < n && col < n) { a[row++][col++] = tmp[(idx - cnt + len) % len]; idx++; } } void rotateSecDiag(int row, int col, int cnt) { while (row > 0 && col < n - 1) row--, col++; int len = 0; while (row < n && col >= 0) { tmp[len++] = a[row++][col--]; } while (cnt >= len) cnt -= len; while (-cnt >= len) cnt += len; row -= len, col += len; int idx = 0; while (row < n && col >= 0) { a[row++][col--] = tmp[(idx - cnt + len) % len]; idx++; } } int main(void) { in = stdin; out = stdout; in = fopen("rotate.in", "rt"); out = fopen("rotate.out", "wt"); fscanf(in, "%d", &n); for (int row = 0; row < n; row++) for (int col = 0; col < n; col++) a[row][col] = row * n + col + 1; int r; fscanf(in, "%d", &r); for (int i = 0; i < r; i++) { char buff[4]; int idx, cnt; fscanf(in, "%s", buff); if (buff[0] == 'r') { fscanf(in, "%d %d", &idx, &cnt); rotateRow(idx, cnt); } else if (buff[0] == 'c') { fscanf(in, "%d %d", &idx, &cnt); rotateCol(idx, cnt); } else if (buff[0] == 'd') { int row, col; fscanf(in, "%d %d %d", &row, &col, &cnt); rotateMainDiag(row, col, cnt); } else if (buff[0] == 'x') { int row, col; fscanf(in, "%d %d %d", &row, &col, &cnt); rotateSecDiag(row, col, cnt); } else fprintf(stderr, "WTF?!\n"); } int q; fscanf(in, "%d", &q); for (int i = 0; i < q; i++) { int row, col; fscanf(in, "%d %d", &row, &col); fprintf(out, "%d\n", a[row][col]); } return 0; }