[POJ1835]宇航員<模擬>

連接: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;
}
View Code

題不難

可是碼起來真的不舒服

建議畫畫圖

相關文章
相關標籤/搜索