Spreadsheet Tracking UVA - 512

#include<cstdio>
#include<algorithm>
using namespace std;
 struct node{
	int x, y;
	node(int x=0,int y=0):x(x),y(y){};
	node operator = (node& b){
		int t=this->x;
		this->x=b.x;
		b.x=t;
		t=this->y;
		this->y=b.y;
		b.y=t;
	}
	void p()
	{
		this->x=0;
		this->y=0;
	}
};
//node map[79][79],an[79][79];
int map[100][100],an[100][100];
int n,m;
/*void copy(int x,int y,int x1,int y1)
{
	node t;
	t=map[x][y];
	map[x][y]=map[x1][y1];
	map[x1][y1]=t;
}*/
void copy(int x,int y,int x1,int y1)
{
	int t;
	t=map[x][y];
	map[x][y]=map[x1][y1];
	map[x1][y1]=t;
}
void del(int c,char type)
{
	
    if(type=='C')
     {
     	
     	for(int i=c;i<=m;i++)
     	{
     		for(int k=1;k<=n;k++)
     		{
     			map[k][i]=map[k][i+1];
			 }
     		
		 }
		 m-=1;
	 }
	 if(type=='R')
	 {
	 	
	 	for(int i=c;i<=n;i++)
     	{
     		for(int k=1;k<=m;k++)
     		{
     			map[i][k]=map[i+1][k];
			 }
     		
		 }
		 n-=1;
	 }
}
void inp(int c,char type)
{
	if(type=='C')
     {
     	
     	for(int i=m;i>=c;i--)
     	{
     		for(int k=1;k<=n;k++)
     		{
     			map[k][i+1]=map[k][i];
			 }
     		
		 }
		 for(int k=1;k<=n;k++)
		 //map[k][c].p();
		 map[k][c]=0;
		 m+=1;
	 }
	 if(type=='R')
	 {
	 	
	 	for(int i=n;i>=c;i--)
     	{
     		for(int k=1;k<=m;k++)
     		{
     			map[i+1][k]=map[i][k];
     			//printf(" map[%d][%d]=an[%d][%d]\n",i,k,map[i][k].x,map[i][k].y);
			 }
     		
		 }
		 for(int k=1;k<=m;k++)
		 //map[c][k].p();
		 map[c][k]=0;
		 n+=1;
	 }
}
int main()
{
	int o=0;
	while(scanf("%d%d",&n,&m)==2&&n)
	{
		for(int i=1;i<=70;i++)
		{
			for(int k=1;k<=70;k++)
			{
				//map[i][k].p();
				//an[i][k].p();
				map[i][k]=0;
				an[i][k]=0;
			}
		}
		for(int i=1;i<=n;i++)
		{
			for(int k=1;k<=m;k++)
			{
				map[i][k]=i*10000+k;
				/*map[i][k].x=i;
				map[i][k].y=k;*/
				//printf("map[%d][%d]=an[%d][%d]\n",i,k,map[i][k].x,map[i][k].y);
				
			}
		}
		int op;
		char cur[10];
		scanf("%d",&op);
		while(op--)
		{
			getchar();
			scanf("%s",cur);
			if(cur[0]=='E')
			{
				int x1,x2,y1,y2;
				scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
				copy(x1,y1,x2,y2);
			}
			else if(cur[0]=='D')
			{
				int i;
				int cu[100],p=1;
				scanf("%d",&i);
				for(int j=1;j<=i;j++)
				{
					scanf("%d",&cu[j]);
				}
				sort(cu+1,cu+1+i);
				/*for(int j=1;j<=i;j++)
				{
					printf("\n%d ",cu[j]);
				}*/
				while(i--)
				{
					del(cu[p]-p+1,cur[1]);
					p++;
				}
			}
			else
			{
				int i,cu[100],p=1;
				scanf("%d",&i);
				for(int j=1;j<=i;j++)
				{
					scanf("%d",&cu[j]);
				}
				sort(cu+1,cu+1+i);
				/*for(int j=1;j<=i;j++)
				{
					printf("\n%d ",cu[j]);
				}*/
				while(i--)
				{
					inp(cu[p]+p-1,cur[1]);
					p++;
				}
			}
		}
		for(int i=1;i<=n;i++)
		{
			for(int k=1;k<=m;k++)
			{
				//printf(" map[%d][%d]=an[%d][%d]\n",i,k,map[i][k].x,map[i][k].y);
				//if(map[i][k].x!=0){
				if(map[i][k]%10000!=0){
					an[map[i][k]/10000][map[i][k]%10000]=i*10000+k;
					//an[map[i][k].x][map[i][k].y].x=i;
					//an[map[i][k].x][map[i][k].y].y=k;
				}
			}
			//printf("\n");
		}
		int k;
		scanf("%d",&k);
		int x,y;
		if(o>0)printf("\n");
		printf("Spreadsheet #%d\n",++o);
		for(int i=1;i<=k;i++)
		{
			scanf("%d%d",&x,&y);
			if(an[x][y]/10000)printf("Cell data in (%d,%d) moved to (%d,%d)\n",x,y,an[x][y]/10000,an[x][y]%10000);
			else printf("Cell data in (%d,%d) GONE\n",x,y);
		}
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值