範例程式碼 uva512
//uva512
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int main() {
int r, c, n, m, r1, c1, r2, c2, flag, idx, count, rr, cc, temp;
string s;
idx = 0;
scanf("%d%d", &r, &c);
while (r != 0 || c != 0) {
vector< vector<int> > data;
vector<int> a;
count = 0;
for (int i = 0; i < r; ++i) {
for (int j = 0; j < c; ++j) {
a.push_back(count);
++count;
}
data.push_back(a);
a.clear();
}
scanf("%d", &n);
for (int k = 0; k < n; ++k) {
a.clear();
cin >> s;
if (s == "EX")
scanf("%d%d%d%d", &r1, &c1, &r2, &c2);
else {
scanf("%d", &m);
for (int j = 0; j < m; ++j) {
scanf("%d", &temp);
a.push_back(temp - 1);
}
sort(a.begin(), a.end());
}
if (s == "EX")
swap(data[r1 - 1][c1 - 1], data[r2 - 1][c2 - 1]);
else if (s == "DR") {
for (int i = 0; i < m; ++i)
data.erase(data.begin() + a[i] - i);
}
else if (s == "DC") {
for (int i = 0; i < m; ++i)
for (int j = 0; j < data.size(); ++j)
data[j].erase(data[j].begin() + a[i] - i);
}
else if (s == "IR") {
for (int i = 0; i < m; ++i)
data.insert(data.begin() + a[i] + i, vector<int>(data[0].size(), -1));
}
else if (s == "IC") {
for (int i = 0; i < m; ++i)
for (int j = 0; j < data.size(); ++j)
data[j].insert(data[j].begin() + a[i] + i, -1);
}
}
++idx;
printf("Spreadsheet #%d\n", idx);
scanf("%d", &n);
for (int k = 0; k < n; ++k) {
flag = 0;
scanf("%d%d", &rr, &cc);
for (int i = 0; i < data.size(); ++i) {
for (int j = 0; j < data[0].size(); ++j) {
if ( data[i][j] == (rr - 1) * c + (cc - 1) ) {
printf("Cell data in (%d,%d) moved to (%d,%d)\n", rr, cc, i + 1, j + 1);
flag = 1;
break;
}
}
if (flag == 1)
break;
}
if (flag != 1)
printf("Cell data in (%d,%d) GONE\n", rr, cc);
}
scanf("%d%d", &r, &c);
if (r != 0 || c != 0)
printf("\n");
}
return 0;
}