#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
void operation(vector<vector<int> > & vec, int pos, char type, char rc) {
if (type == 'D') {
if (rc == 'R') vec.erase(vec.begin() + pos);
else for (int i = 0; i<vec.size(); i++)vec[i].erase(vec[i].begin() + pos);
}
else {
if (rc == 'R') vec.insert(vec.begin() + pos, vector<int>(vec[0].size(), -1));
else for (int i = 0; i<vec.size(); i++)vec[i].insert(vec[i].begin() + pos, -1);
}
}
int main()
{
int r0, c0, n;
int cnt = 0;
bool first = true;
while (cin >> r0 >> c0 && r0 != 0 && c0 != 0) {
if (first == false)cout << endl;
if (first == true)first = false;
cin >> n;
vector<vector<int> > sheet(r0), ans(r0);
for (int i = 0; i<r0; i++) {
sheet[i].resize(c0);
ans[i].resize(c0);
for (int j = 0; j<c0; j++) {
sheet[i][j] = i*c0 + j;
ans[i][j] = -1;
}
}
string cmd;
for (int i = 0; i<n; i++) {
cin >> cmd;
if (cmd[0] == 'E') {
int a, b, c, d;
cin >> a >> b >> c >> d;
int t = sheet[a - 1][b - 1]; sheet[a - 1][b - 1] = sheet[c - 1][d - 1]; sheet[c - 1][d - 1] = t;
}
else {
int c;
cin >> c;
vector<int> oprs(c);
for (int j = 0; j<c; j++)cin >> oprs[j];
sort(oprs.begin(), oprs.end());
for (int j = 0; j<c; j++) {
if (cmd[0] == 'D')operation(sheet, oprs[j] - 1 - j, cmd[0], cmd[1]);
else operation(sheet, oprs[j] - 1 + j, cmd[0], cmd[1]);
}
}
}
for (int i = 0; i<sheet.size(); i++) {
for (int j = 0; j<sheet[i].size(); j++) {
if (sheet[i][j] != -1)ans[sheet[i][j] / c0][sheet[i][j] % c0] = i*(sheet[i].size()) + j;
}
}
int q;
cin >> q;
printf("Spreadsheet #%d\n", ++cnt);
for (int i = 0; i<q; i++) {
int a, b;
cin >> a >> b;
if (ans[a - 1][b - 1] == -1)printf("Cell data in (%d,%d) GONE\n", a, b);
else printf("Cell data in (%d,%d) moved to (%d,%d)\n", a, b, ans[a - 1][b - 1] / sheet[0].size() + 1, ans[a - 1][b - 1] % sheet[0].size() + 1);
}
}
return 0;
}
512 - Spreadsheet Tracking
最新推荐文章于 2022-02-02 22:59:38 发布