追踪电子表格中的单元格(Spreadsheet Tracking ACM/ICPC World Finals1997,UVa512)

本文介绍了一种优化处理电子表格指令集的方法,避免了全表状态更新带来的效率低下问题。通过追踪目标单元格,文章详细阐述了如何高效地处理包括行/列增删和位置交换在内的各种操作,确保查询结果的准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

解决本题最直接的思路是:先模拟增删交换操作,算出最后电子表格的状态,然后执行每次查询.这种方法不仅效率低而且不容易理解

另一种思路,直接追踪要查询的单元格,不用关心整个单元格的变化.

详细注释完整代码:

#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&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值