关于代码能力

代码能力是很重要的,像我,稍微复杂一点的题就做得想吐。

写了个200line+的代码,就已经写的想吐了。重新构思敲一遍得了。

最讨厌的就是无力感啊!

#include<iostream>
#include<cstdio>
#define MN 555555
#define l Recnt&1
#define r (Recnt+1)&1
using namespace std;

struct Node{ int next[2],val,id; }deque[MN<<1],stL[MN<<1],stR[MN<<1];
int Recnt,topL,topR;

int N,M,L,R;

void init()
{
 	 topL=topR=Recnt=0;
 	 for( int i=1;i<=N;i++ )
 	 {
	  	  scanf( "%d",&deque[i].val );
	  	  deque[i].next[0]=i-1;
	  	  deque[i].next[1]=i+1;
	  	  deque[i].id=i;
	 }
	 deque[0].next[1]=1;
	 deque[0].next[0]=-1;
	 deque[0].id=0;
	 deque[N+1].next[1]=-1;
	 deque[N+1].next[0]=N;
	 deque[0].id=N+1;
}

void print()
{
 	 bool f=true;
 	 for( int i=0;i<topL;i++ )
 	 {
	  	  if( f ) printf("%d",stL[i].val );
		  else printf( " %d",stL[i].val );
	  	  f=false;
	 }
	 for( int i=Recnt&1?R:L;;i=deque[i].next[r] )
	 {
	  	  if( f ) printf( "%d",deque[i].val );
	  	  else printf( " %d",deque[i].val );
	  	  f=false;
	  	  if( l && i==L ) break;
	  	  if( r && i==R ) break;
  	 }
  	 for( int i=topR-1;i>=0;i-- )
  	 {
	  	  if( f ) printf( "%d",stR[i].val );
  	  	  else printf( " %d",stR[i].val );
  	  	  f=false;
  	 }
	 printf( "\n" );
}

void solve()
{
 	 char str[111];
 	 int val;
 	 scanf( "%d %d %d",&L,&R,&M );
 	 for( int i=1;i<L;i++ )
 	 	  stL[topL++]=deque[i];
 	 for( int i=N;i>R;i-- )
 	 	  stR[topR++]=deque[i];
 	 getchar();
 	 int NN=N+2;
 	 while( M-- )
 	 {
	  		gets(str);
	  		if( !strcmp(str,"MoveLeft R") )
	  		{
			 	if( Recnt&1 )
			 	{
				 	stR[topR].id=L;
				 	stR[topR++]=deque[L];
				 	L=deque[L].next[l];
	 			}
	 			else
	 			{
				 	stR[topR].id=R;
			 	 	stR[topR++]=deque[R];
			 		R=deque[R].next[l];
				}
		 	}
		 	else if( !strcmp(str,"MoveLeft L") )
		 	{
			 	 deque[L].next[l]=stL[topL-1].id;
			 	 stL[topL-1].next[r]=L;
			 	 topL--;
			 	 L=deque[L].next[l];
	 	 	}
	 	 	else if( !strcmp(str,"MoveRight R") )
	 	 	{
			 	  	 deque[R].next[r]=stR[topR-1].id;
			 	 	 stR[topR-1].next[l]=R;
			 	 	 topR--;
			 	 	 R=deque[R].next[r];
 	 	 	}
 	 	 	else if( !strcmp(str,"MoveRight L") )
 	 	 	{
			 	 if( Recnt&1 )
			 	 {
				  	 stL[topL].id=R;
				  	 stL[topL++]=deque[R];
				  	 R=deque[R].next[r];
 	 		 	 }
 	 		 	 else
 	 		 	 {
			 	  	 stL[topL].id=L;
			 	 	 stL[topL++]=deque[L];
			 	 	 L=deque[L].next[r];
				 }
 	 	 	}
 	 	 	else if( sscanf(str,"Insert L %d",&val) )
 	 	 	{
			 	 if( Recnt&1 )
			 	 { 	 
 	 		 	 	 deque[NN].val=val;
			 	 	 deque[NN].next[l]=R;
			 	 	 deque[NN].next[r]=deque[R].next[r];
			 	 	 deque[deque[R].next[r]].next[l]=NN;
			 	 	 deque[R].next[r]=NN++;
			 	 	 //R=deque[R].next[r];
 	 		 	 }
 	 		 	 else
 	 		 	 {
			 	  	 deque[NN].val=val;
			 	 	 deque[NN].next[l]=deque[L].next[l];
			 	 	 deque[NN].next[r]=L;
			 	 	 deque[deque[L].next[l]].next[r]=NN;
			 	 	 deque[L].next[l]=NN++;
			 	 	 L=deque[L].next[l];
				 }
 	 	 	}
 	 	 	else if( sscanf(str,"Insert R %d",&val) )
 	 	 	{
			 	 if( Recnt&1 )
			 	 {
				  	 deque[NN].val=val;
			 	 	 deque[NN].next[l]=deque[L].next[l];
			 	 	 deque[NN].next[r]=L;
			 	 	 deque[deque[L].next[l]].next[r]=NN;
			 	 	 deque[L].next[l]=NN++;
			 	 	 L=deque[L].next[l];
	 		 	 }
	 		 	 else
	 		 	 {
			 	  	 deque[NN].val=val;
			 	 	 deque[NN].next[l]=R;
			 	 	 deque[NN].next[r]=deque[R].next[r];
			 	 	 deque[deque[R].next[r]].next[l]=NN;
			 	 	 deque[R].next[r]=NN++;
			 	 	 R=deque[R].next[r];
				 }
 	 	 	}
 	 	 	else if( !strcmp(str,"Delete L") )
 	 	 	{
			 	 if( Recnt&1 )
			 	 {
			 	  	 deque[deque[R].next[l]].next[r]=deque[R].next[r];
			 	 	 deque[deque[R].next[r]].next[l]=deque[R].next[l];
			 	 	 R=deque[R].next[r];
				 }
				 else
				 {
				  	 deque[deque[L].next[l]].next[r]=deque[L].next[r];
			 	 	 deque[deque[L].next[r]].next[l]=deque[L].next[l];
			 	 	 L=deque[L].next[r];
				 }
 	 	 	}
 	 	 	else if( !strcmp(str,"Delete R") )
 	 	 	{
			 	 if( Recnt&1 )
			 	 {
			 	  	 deque[deque[L].next[l]].next[r]=deque[L].next[r];
			 	 	 deque[deque[L].next[r]].next[l]=deque[L].next[l];
					 L=deque[L].next[l];
				 }
				 else
				 {
			 	  	 deque[deque[R].next[l]].next[r]=deque[R].next[r];
			 	 	 deque[deque[R].next[r]].next[l]=deque[R].next[l];
					 R=deque[R].next[l];
				 }
	 	 	}
 	 	 	else if( !strcmp(str,"Reverse") )
 	 	 	{
			 	 Recnt^=1;
 	 	 	}
 	 	 	//print();
	 }
}

int main()
{
 	freopen( "test.in","r",stdin );
 	freopen( "test.out","w",stdout );
 	int T;
 	scanf( "%d",&T );
 	while( T-- )
 	{
	 	scanf( "%d",&N );
		init();
		solve();
		print();
  	}
 	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值