依图科技的笔试题--蚂蚁爬魔方
无力吐槽今天依图科技的第一题,蚂蚁爬魔方,这题确定是能在短时间里写完的吗? 第二题10分钟秒过了,第一题写了1个小时,没debug完,过了22%, 赛后debug的代码,长得像坨屎,不知道有没有短点的代码。
参考:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<vector> using namespace std; int pos[6][9][4],p[5][5]; int dx[]={-1,0,1,0}; int dy[]={0,1,0,-1}; int encode(int x, int y){ return x*10+y; } pair<int,int> decode(int en){ return make_pair(en/10,en%10); } void get(){ for(int i=1;i<=3;i++) for(int j=1;j<=3;j++) for(int k=0;k<4;k++){ int fs=decode(p[i][j]).first; int se=decode(p[i][j]).second; pos[fs][se][k]=p[i+dx[k]][j+dy[k]]; } } int get0(){ for(int i=1;i<=3;i++) for(int j=1;j<=3;j++) p[i][j]=encode(0,(i-1)*3+j-1); //up p[0][1]=encode(4,6); p[0][2]=encode(4,7); p[0][3]=encode(4,8); //down p[4][1]=encode(5,0); p[4][2]=encode(5,1); p[4][3]=encode(5,2); //left p[1][0]=encode(3,2); p[2][0]=encode(3,5); p[3][0]=encode(3,8); //right p[1][4]=encode(1,0); p[2][4]=encode(1,3); p[3][4]=encode(1,6); get(); } int get1(){ for(int i=1;i<=3;i++) for(int j=1;j<=3;j++) p[i][j]=encode(1,(i-1)*3+j-1); //up p[0][1]=encode(4,8); p[0][2]=encode(4,5); p[0][3]=encode(4,2); //down p[4][1]=encode(5,2); p[4][2]=encode(5,5); p[4][3]=encode(5,8); //left p[1][0]=encode(0,2); p[2][0]=encode(0,5); p[3][0]=encode(0,8); //right p[1][4]=encode(2,0); p[2][4]=encode(2,3); p[3][4]=encode(2,6); get(); } int get2(){ for(int i=1;i<=3;i++) for(int j=1;j<=3;j++) p[i][j]=encode(2,(i-1)*3+j-1); //up p[0][1]=encode(4,2); p[0][2]=encode(4,1); p[0][3]=encode(4,0); //down p[4][1]=encode(5,8); p[4][2]=encode(5,7); p[4][3]=encode(5,6); //left p[1][0]=encode(1,2); p[2][0]=encode(1,5); p[3][0]=encode(1,8); //right p[1][4]=encode(3,0); p[2][4]=encode(3,3); p[3][4]=encode(3,6); get(); } int get3(){ for(int i=1;i<=3;i++) for(int j=1;j<=3;j++) p[i][j]=encode(3,(i-1)*3+j-1); //up p[0][1]=encode(4,0); p[0][2]=encode(4,3); p[0][3]=encode(4,6); //down p[4][1]=encode(5,6); p[4][2]=encode(5,3); p[4][3]=encode(5,0); //left p[1][0]=encode(2,2); p[2][0]=encode(2,5); p[3][0]=encode(2,8); //right p[1][4]=encode(0,0); p[2][4]=encode(0,3); p[3][4]=encode(0,6); get(); } int get4(){ for(int i=1;i<=3;i++) for(int j=1;j<=3;j++) p[i][j]=encode(4,(i-1)*3+j-1); //up p[0][1]=encode(2,2); p[0][2]=encode(2,1); p[0][3]=encode(2,0); //down p[4][1]=encode(0,0); p[4][2]=encode(0,1); p[4][3]=encode(0,2); //left p[1][0]=encode(3,0); p[2][0]=encode(3,1); p[3][0]=encode(3,2); //right p[1][4]=encode(1,2); p[2][4]=encode(1,1); p[3][4]=encode(1,0); get(); } int get5(){ for(int i=1;i<=3;i++) for(int j=1;j<=3;j++) p[i][j]=encode(5,(i-1)*3+j-1); //up p[0][1]=encode(0,6); p[0][2]=encode(0,7); p[0][3]=encode(0,8); //down p[4][1]=encode(2,8); p[4][2]=encode(2,7); p[4][3]=encode(2,6); //left p[1][0]=encode(3,8); p[2][0]=encode(3,7); p[3][0]=encode(3,6); //right p[1][4]=encode(1,6); p[2][4]=encode(1,7); p[3][4]=encode(1,8); get(); } int left(int x,int y,int ax,int ay){ int id; for(int i=0;i<4;i++) if(pos[x][y][i]==encode(ax,ay)) id=i; id--; if(id<0) id+=4; return id; } int right(int x,int y,int ax,int ay){ int id; for(int i=0;i<4;i++) if(pos[x][y][i]==encode(ax,ay)) id=i; id++; if(id==4) id-=4; return id; } int opposite(int x,int y,int ax,int ay){ int id; for(int i=0;i<4;i++) if(pos[ax][ay][i]==encode(x,y)) id=i; return (id+2)%4; } int main() { string a[6],s; for(int i=0;i<6;i++) cin>>a[i]; cin>>s; get0(); get1(); get2(); get3(); get4(); get5(); int x=0,y=4,ax=0,ay=5; for(int i=0;i<s.size();i++){ if(s[i]=='L'){ int id=left(x,y,ax,ay); ax=decode(pos[x][y][id]).first; ay=decode(pos[x][y][id]).second; } else if(s[i]=='R'){ int id=right(x,y,ax,ay); ax=decode(pos[x][y][id]).first; ay=decode(pos[x][y][id]).second; } else{ int id=opposite(x,y,ax,ay); x=ax,y=ay; ax=decode(pos[x][y][id]).first; ay=decode(pos[x][y][id]).second; } printf("%c",a[x][y]); } puts(""); return 0; } /* input: abcdefghi ooooooooo ppppppppp qqqqqqqqq rrrrrrrrr sssssssss LMMMMMMMMMMMMRRRMMMMMMMMMMMM output: ebrrrpppsssheeeedqqqpppooofe */