解决本题最直接的思路是:先模拟增删交换操作,算出最后电子表格的状态,然后执行每次查询.这种方法不仅效率低而且不容易理解
另一种思路,直接追踪要查询的单元格,不用关心整个单元格的变化.
详细注释完整代码:
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cctype>
#include <iostream>
#include <string>
#include <sstream>
#include <algorithm>
#include <assert.h>
#include <vector>
#include <queue>
#include <stack>
#include <set>
#include <map>
using namespace std;
#define maxd 10000
struct Command{
char c[5];//用于输入指令
int r1,c1,r2,c2;//用于交换位置的点
int a,x[20];//用于输入增删行列和个数
}cmd[maxd];
int r,c,n;//电子单元的行列数,和指令数
int simulate(int* r0,int* c0)
{
for(int i=0;i<n;i++){
if(cmd[i].c[0]=='E'){//交换位置,有两个(r1,c1),(r2,c2)
if(cmd[i].r1==*r0&&cmd[i].c1==*c0){
*r0=cmd[i].r2;
*c0=cmd[i].c2;
}
else if(cmd[i].r2==*r0&