codeForces 198B.Jumping on Walls(DFS+技巧)

D - Jumping on Walls

  CodeForces - 198B 

Vasya plays a computer game with ninjas. At this stage Vasya's ninja should get out of a deep canyon.

The canyon consists of two vertical parallel walls, their height is n meters. Let's imagine that we split these walls into 1 meter-long areas and number them with positive integers from 1 to n from bottom to top. Some areas are safe and the ninja can climb them. Others are spiky and ninja can't be there. Let's call such areasdangerous.

Initially the ninja is on the lower area of the left wall. He can use each second to perform one of the following actions:

  • climb one area up;
  • climb one area down;
  • jump to the opposite wall. That gets the ninja to the area that is exactly kmeters higher than the area he jumped from. More formally, if before the jump the ninja is located at area x of one wall, then after the jump he is located at area x + k of the other wall.

If at some point of time the ninja tries to get to an area with a number larger thann, then we can assume that the ninja got out of the canyon.

The canyon gets flooded and each second the water level raises one meter. Initially the water level is at the lower border of the first area. Ninja cannot be on the area covered by water. We can assume that the ninja and the water "move in turns" — first the ninja performs some action, then the water raises for one meter, then the ninja performs one more action and so on.

The level is considered completed if the ninja manages to get out of the canyon.

After several failed attempts Vasya started to doubt whether it is possible to complete the level at all. Help him answer the question.

Input

The first line contains two integers n and k (1 ≤ n, k ≤ 105) — the height of the canyon and the height of ninja's jump, correspondingly.

The second line contains the description of the left wall — a string with the length of n characters. The i-th character represents the state of the i-th wall area: character "X" represents a dangerous area and character "-" represents a safe area.

The third line describes the right wall in the same format.

It is guaranteed that the first area of the left wall is not dangerous.

Output

Print "YES" (without the quotes) if the ninja can get out from the canyon, otherwise, print "NO" (without the quotes).

Example
Input
7 3
---X--X
-X--XX-
Output
YES
Input
6 2
--X-X-
X--XX-
Output
NO
Note

In the first sample the ninja should first jump to the right wall, then go one meter down along the right wall, then jump to the left wall. The next jump can get the ninja from the canyon.

In the second sample there's no way the ninja can get out of the canyon.


题意:悬崖有两条路,你现在站在第一条路开始的地方,你要离开这个悬崖,X不能走,-能走,你有三种移动方式,在同一条路向上向下走一步(在图中意思就是在同一行你可以往前走一步或者后退一步),或者是跳到对面那一条路上想对你所在位置往上三个位置的地方,同时你没移动一次水位就会上涨一个位置,你浸入水中就会死;问你能不能跳出这个悬崖;

思路:DFS;每次判断这三种状态如果可行就继续深搜,判断是否能够跳出这个图就行了;一开始一直错,后来参考一位学长的做法才过了;

#include   
using namespace std;  
const int maxn=1e5+100;  
int n,m,water;  
char a[2][maxn];  
int v[2][maxn];  
int dfs(int pos,int j)
{  
    if(j>n)
	{
		return 1;
	}  
    if(a[pos][j]=='X'||j



你可能感兴趣的:(【递归/搜索】)