传送门:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=5630
题意:有2个操作,①TURN X,X为0向左转90度,X为1向右转90度;②MOV X,向前走X步.起始位置为(0,0),图的右上角为(M,M),初始朝向为右,如果经过N次操作都没有越过边界则输出最后所在位置,否则输出-1
#include<cstdio>
#include<algorithm>
#include<string.h>
using namespace std;
int main(){
int n,m,k,d,flag,x,y;
char op[10];
// freopen("in.txt","r",stdin);
while(~scanf("%d%d",&n,&m)){
d=1;
flag=1;
x=y=0;
while(m--){
scanf("%s%d",op,&k);
if(flag){
if(op[0]=='T'){
if(k) d=(d+1)%4;
else d=(d+3)%4;
}
else{
if(d==0) y+=k;
else if(d==1) x+=k;
else if(d==2) y-=k;
else x-=k;
}
}
if(x<0||x>n||y<0||y>n) flag=0;
}
if(flag) printf("%d %d\n",x,y);
else printf("-1\n");
}
return 0;
}