题目连接:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2156
题意大概:一个迷宫,每个用WESN表示,每一个时刻都会发生变化,变化规律为E to W, W to S, S to N, and N to E.
人开始的位置在(0,0)宝藏开始的位置在右下角。
宝藏每一个时间段都会跟着迷宫上的字母移动一格,越界则停落原处。
人每一个时间段:
1.都会跟着迷宫上的字母移动一格,越界则停落原处。
2.人会再根据自己的意愿走一步,按prefers to stay there than move, prefer E than W, W than N, and N than S的顺序,往离宝藏近的地方走。或者停留原处。
结束:1.找到宝藏 2.陷入循环,这个循环跟随地图的移动,所以要保证特定的时刻,字母相等。 3.大于100就跳出循环
解法:地图是来回变化的,开始看这题很难,就没做,就是一个模拟题,变化的地图总共有4种静态地图,并不用全部定义出来,
每次用的时候把改变时间变量(ttime)和当前地方的字幕就好。
每次所到的地方要先根据题意移动人和宝藏。
完了就是寻找出口,找出口题意已经明确给出了方法,按照优先方向变化的顺序寻找离宝藏最近的位置并向其移动,如果the same geometrical distance相同的集合距离,优先prefer E than W, W than N, and N than S这个顺序。
还有一个问题就是判断死循环。用了个5个变量的结构体每一次ttime都循环一遍,记录每一次的人的坐标,宝藏的坐标,以及当前时刻对4取余的结果,当本次遇到的5个变量和之前完全符合,就陷入了死循环。
如果看出是模拟题,感觉是可以做的,但做完之后发现,要想在比赛时A出这个题并不是很容易的,需要很严谨的逻辑,而且这道题意也是很难理解透彻的,做这个断断续续也用的半天的时间,但感觉这种东西是很好练的,需要的就是多刷题,多多去理解这些题,把大脑关于这种东西的神经纤维练得很厚,覆盖满髓鞘质,就会变得熟练顺手。
顺便说一句,SDUT的测试数据很水,没有死循环和超100的测试数据。