2010 - 熟悉地形
时间限制 : 1 秒
内存限制 : 128 MB
刚入学的时候总喜欢瞎逛以熟悉地形,当然也适用于网游-_-
话说有个人在10^9*10^9的地方乱走,当然他希望不重复经过相同的位置,给出他的初始位置和走m步的指令,问是否有存在某个位置被他走过两次(在初始位置但还没执行指令也认为初始位置被走过,且一步为一个单位长度)
题目输入
第一行输入两个整数,-10^9<=x,y<=10^9,表示初始位置,第二行输入一个数m,表示m步指令,m<=50。第三行输入一串指令(m个),指令只有4种:UDLR,U表示向上走,D表示向下走,L表示向左走,R表示向右走。
题目输出
每个测试数据一行,如果存在重复走过的格子输出Yes,否则输出No。
输入/输出样例
输入格式
1 1 4 ULDR 1 1 3 UUU
输出格式
Yes No
C++解答
#include<stdio.h> #include<string.h> #include<math.h> #include<iostream> #include<algorithm> #define INF 1000000000 using namespace std; char a[50]; bool b[150][150]; int main() { int x,y; while(scanf("%d%d",&x,&y)!=EOF) { memset(b,0,sizeof(b)); x=75;y=75; b[x][y]=1; int m; scanf("%d",&m); scanf("%s",a); int flag=0; for(int i=0;i<m;i++) { if(a[i]=='U') { x--; if(b[x][y]==0) b[x][y]=1; else { flag=1; break; } } else if(a[i]=='D') { x++; if(b[x][y]==0) b[x][y]=1; else { flag=1; break; } } else if(a[i]=='L') { y--; if(b[x][y]==0) b[x][y]=1; else { flag=1; break; } } else if(a[i]=='R') { y++; if(b[x][y]==0) b[x][y]=1; else { flag=1; break; } } } if(flag==1) printf("Yes\n"); else printf("No\n"); } }