WA#2
查看原帖
WA#2
1333328
Co_Ce楼主2025/8/4 19:32
#include <bits/stdc++.h>

using namespace std;

inline int read() {
	int x = 0, f = 1;
	char ch = getchar();
	while(ch < '0' || ch > '9') {
		if(ch == '-') {
			f = -1;
		}
		ch = getchar();
	}
	while(ch >= '0' && ch <= '9') {
		x = x * 10 + ch - 48;
		ch = getchar();
	}
	return x * f;
}

inline void print(int x) {
	if(x < 0) {
		putchar('-');
		x = -x;
	}
	if(x > 9) {
		print(x / 10);
	}
	putchar(x % 10 + 48);
}

constexpr int N = 1e6 + 10;

int T;

int n, m;

int a;

int sum;

int tag[N], ta;

int in[N];

string s[N];

vector <int> vec[N];

inline void dfs(int x) {
	if(tag[x]) {
		return ;
	}
	tag[x] = 1;
	for(int y : vec[x]) {
		dfs(y);
	}
}

int main() {
	
//	ios :: sync_with_stdio(false);
//	cin.tie(0), cout.tie(0);
	
	T = read();
	while(T--) {
		
		n = read(), m = read();
		for(int i = 1; i <= n; i++) {
			cin >> s[i];
			s[i] = ' ' + s[i];
		}
		sum = 0;
		vec[N].clear();
		memset(tag, 0, sizeof(tag));
		ta = 0;
		
		for(int i = 1; i <= n; i++) {
			for(int j = 1; j <= m; j++) {
				a = read();
				if(s[i][j] == 'u') {
					if(i - a >= 1) {
						vec[(i - 1) * m + j].push_back((i - 1 - a) * m + j);
						in[(i - 1 - a) * m + j]++;
					}
				}
				else if(s[i][j] == 'd') {
					if(i + a <= n) {
						vec[(i - 1) * m + j].push_back((i + a - 1) * m + j);
						in[(i + a - 1) * m + j]++;
					}
				}
				else if(s[i][j] == 'l') {
					if(j - a >= 1) {
						vec[(i - 1) * m + j].push_back((i - 1) * m + j - a);
						in[(i - 1) * m + j - a]++;
					}
				}
				else if(s[i][j] == 'r') {
					if(j + a <= m) {
						vec[(i - 1) * m + j].push_back((i - 1) * m + j + a);
						in[(i - 1) * m + j + a]++;
					}
				}
			}
		}
		
		for(int i = 1; i <= n * m; i++) {
			if(in[i] == 0) {
				sum++;
				dfs(i);
				break;
			}
		}
		
		for(int i = 1; i <= n * m; i++) {
			if(tag[i] == 0) {
				ta++;
			}
		}
		if(ta == 0) {
			cout << "Yes" << "\n";
		}
		else {
			cout << "No" << "\n";
		}
	}
	
	return 0;
}
2025/8/4 19:32
加载中...