Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
贴个1k的代码附有解释供交流 哈哈哈哈#include<iostream> #include<string.h> #include<string> using namespace std; int dir[6][4]={1,2,4,5,3,2,0,5,3,4,0,1,2,1,5,4,0,2,3,5,1,0,4,3}; //dir[6][4] 是构造以i为头顶方向的6个顺时针遍历面 int dist[6]={0,0,0,0,0,0}; //保存每个方向上走的距离 int main() { string headfor[6]={"forward","right","back","left","up","down"}; int n,num,i,step,j,turn,locate,temp; string direction; cin>>n; while(n--) { memset(dist,0,sizeof(dist)); cin>>num; int Dir_now=0; //当前方向 int belong=2; //头顶方向 for(i=0;i<num;i++) { cin>>direction>>step; for(j=0;j<6;j++) { if(direction.compare(headfor[j])==0) {turn=j;break;} } if(turn<4) //前后左右按照顺时针遍历,此时“上方”不变 { for(j=0;j<4;j++) if(dir[belong][j]==Dir_now) {locate=j;break;} Dir_now=dir[belong][(locate+turn)%4]; } else if(turn==4) //向上走,即原来的上方变前方,后方变头顶 { temp=(Dir_now+3)%6; Dir_now=belong; belong=temp; } else //向下走,即原来的下方变前方,头顶变成后方 { temp=(belong+3)%6; belong=Dir_now; Dir_now=temp; } dist[Dir_now]+=step; } cout<<dist[0]-dist[3]<<" "<<dist[1]-dist[4]<<" "<<dist[2]-dist[5]<<" "<<Dir_now<<endl; } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator