Problem: Example

Input

2 4
%.@\$
..\$\$


Output

Yes

Solution (in CPP):

Solution:
#include "bits/stdc++.h"
using namespace std;
/*
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2781

????\??????????????????????
????????????????????????????\???????????????§?????????????????????????????£???????????????????\?????????????????????????????????????
????????????????£???????????\??????????????????????????????????????????????????????¢???????????????????????????????\???????????????????
?????????????????¨?????§??????????????????????±??????????????????°????????????????????¨??????

 ????´????????????????????????°???????????????????????¢????????£??????????????°?????????????????????????¨??????????????????????
 ???1??????????£?????\????????????\??§???????????????2?????????????£?????\?????????\????????¨?????§?????????????????????
 ???????????????????????????????????????????£???¨?????¶?????¨?????????????\??????¨????£??????°?????£????????????????????????????????¨?????????
 ??°??????????????????????????????????????????????????????????????¨????????????????\?????????????????????°???????????°???
 ????????¨????\?????????????????????????????????¨?????§????????????????????????0?????\??????????£?????????????

 ?\??????¨??¨??????????£???????????????????????????????????????????????????????????????????????????°????\??????¨????£????
 ??????????¬????????????????????????¨?????§???????????????????????????????\??????¨????£?????°´?????\??????????????´?????£??\???????????????
 ?§?????????????????????????????????¨??????????????¨?????§??????????????????????\??????¨????£??????????????????????????????¨?????§????????????
 ???????\???????????????\??????????????°???????£???????????????????????????£????????????????????¨?????£??????????\?????????????????????????
 ?\???????????????¨??????????£?????????????????????????????????????????????¨?????£???????????°??????????????°?????§???????????¨???????????§?????????

 ??????????£??????????????????????????????????????????£?????¨??????????\????????????????????????¨?????§??????????????????????????¨????????°???
 ????????¨????\???????????£?????????????????????¨?????§????????????????\???????????£???????????????????????????°???????????¨????????°???
 ?\?????????????????????¨?????§??????????\?????????????????????????????????¨?????§????????????

*/
typedef long long ll;
int dx[4] = { 1,0,-1,0 };
int dy[4] = { 0,1,0,-1 };

int main() {
	cin.tie(0); ios::sync_with_stdio(false);
	int H, W; cin >> H >> W;
	vector<vector<int>> masu(H + 2, vector<int>(W + 2, -1));
	int px, py;
	int hx, hy;
	vector<int> sx, sy;
	//initialize
	for (int i = 1; i <= H;i++) {
		for (int j = 1; j <= W;j++) {
			char c; cin >> c;
			if (c == '%') {
				masu[i][j] = 0;
				hx = i; hy = j;
			}
			else if (c == '.')masu[i][j] = 0;
			else if (c == '@') { 
				masu[i][j] = 0;
				px = i; py = j;
			}
			else if (c == '$') sx.push_back(i), sy.push_back(j);
		}
	}
	vector<vector<int>> dist(H + 2, vector<int>(W + 2, (1 << 30)));
	queue<pair<int, int>> q;
	q.push({ px,py });
	dist[px][py] = 0;
	while (!q.empty()) {
		auto n = q.front(); q.pop();
		for (int i = 0; i < 4;i++) {
			int nx = n.first + dx[i], ny = n.second + dy[i];
			if (masu[nx][ny] == -1) continue;
			if (dist[nx][ny] > dist[n.first][n.second]+1) {
				dist[nx][ny] = dist[n.first][n.second] + 1;
				q.push({ nx,ny });
			}
		}
	}
	int key = dist[hx][hy];
	dist = vector<vector<int>>(H + 2, vector<int>(W + 2, (1 << 30)));
	for (int i = 0; i < sx.size();i++) {
		q.push({ sx[i],sy[i] });
		dist[sx[i]][sy[i]] = 0;
	}
	while (!q.empty()) {
		auto n = q.front(); q.pop();
		for (int i = 0; i < 4;i++) {
			int nx = n.first + dx[i], ny = n.second + dy[i];
			if (masu[nx][ny] == -1) continue;
			if (dist[nx][ny] > dist[n.first][n.second] + 1) {
				dist[nx][ny] = dist[n.first][n.second] + 1;
				q.push({ nx,ny });
			}
		}
	}
	if (key >= dist[hx][hy]) {
		cout << "No" << endl;
	}
	else {
		cout << "Yes" << endl;
	}
}