連接:http://poj.org/problem?id=1835ios
題幹太長我就不放描述了。ide
一道大模擬spa
看着就腦袋疼。code
難點可能在於方向的確認上blog
要明確當前的頭朝向和臉朝向,才能進行處理get
一個小小坑可能算是up和down吧,不看圖可能就以爲是直上直下了string
裏面全部的方向都是相對於當前臉的朝向的。it
而後就是0對3 1對4 2對5 取相反能夠+3再%6io
而後就是一堆if編譯
case也行,不過我那提交一直提示編譯錯誤,改if就沒了,不知道爲啥
#include<cstdio> #include<cstring> #include<iostream> #include<cmath> #include<algorithm> #include<queue> #include<utility> #include<stack> #include<cstdlib> #define ll long long #define inf 0x3fffffff using namespace std; int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } void fre(){ freopen(" .in","r",stdin); freopen(" .out","w",stdout); } int x,y,z,step,n,T; void sec_main(int direct){ if(direct==0)x+=step; if(direct==1)y+=step; if(direct==2)z+=step; if(direct==3)x-=step; if(direct==4)y-=step; if(direct==5)z-=step; } int main(){ int head,dir,left,temp; T=read(); while(T--){ n=read(); char s[20]; head=2,dir=0,left=4,x=y=z=0; for(int i=0;i<n;++i){ scanf("%s %d",s,&step); if(s[0]=='b'){ dir=(dir+3)%6,left=(left+3)%6; } if(s[0]=='l'){ temp=left,left=(dir+3)%6,dir=temp; } if(s[0]=='r'){ temp=dir,dir=(left+3)%6,left=temp; } if(s[0]=='u'){ temp=head,head=(dir+3)%6,dir=temp; } if(s[0]=='d'){ temp=dir,dir=(head+3)%6,head=temp; } sec_main(dir); } cout<<x<<' '<<y<<' '<<z<<' '<<dir<<endl; } return 0; }
題不難
可是碼起來真的不舒服
建議畫畫圖