大家好!我是小码匠。
这道题是刚刷的,老码农惯用的套路,二选一。
另外一道题我没看明白题意,就选了这道。
这道题本地调试完,提交很诡异,
我当时很疑惑,老码农又出来嘚瑟了下:你明天提交肯定能AC。
打破砂锅问到底,我问为啥?
老码农收:洛谷代码提交给CF时会调用CF的接口,
CF的接口返回Happy New Year!
, 其实也是一种正常状态,但洛谷就蒙圈了。
所以提示的:Unknown Error
(当时听得半明白!)
我百度百科了下,原来俄罗斯
俄罗斯像中国一样,除公历外,还有古老的民间历法。根据东正教的历法,圣诞节和新年要比欧洲的节日晚两个星期。也就是说,1月7日是俄历圣诞节;现在1月14日是俄历新年。
时差是5小时。
今天还是分享代码,题解就不写了。
#include <bits/stdc++.h>
using namespace std;
int cx[4] = {0, 0, 1, -1};
int cy[4] = {1, -1, 0, 0};
bool vis[55][55];
char g[55][55];
bool bfs(int n, int m, int cnt) {
int ans = 0;
queue<pair<int, int>> q;
if (g[n][m] != '#') {
q.push({n, m});
}
while (!q.empty()) {
auto k = q.front();
q.pop();
if (g[k.first][k.second] == 'G') {
++ans;
} else if (g[k.first][k.second] == 'B') {
return false;
}
for (int i = 0; i < 4; ++i) {
int x = k.first + cx[i];
int y = k.second + cy[i];
if (x <= 0 || x > n || y <= 0 || y > m || g[x][y] == '#') {
continue;
}
if (vis[x][y]) {
continue;
}
vis[x][y] = true;
q.push({x, y});
}
}
return ans == cnt;
}
void best_coder() {
int t;
cin >> t;
while (t--) {
memset(vis, false, sizeof(vis));
memset(g, '.', sizeof(vis));
int n, m;
cin >> n >> m;
int cnt = 0;
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= m; ++j) {
char c;
cin >> c;
if (c == '.' && g[i][j] == '#') {
continue;
}
g[i][j] = c;
if (g[i][j] == 'G') {
++cnt;
} else if (g[i][j] == 'B') {
for (int s = 0; s < 4; ++s) {
if (g[cx[s] + i][cy[s] + j] == '.') {
g[cx[s] + i][cy[s] + j] = '#';
}
}
}
}
}
if (bfs(n, m, cnt)) {
cout << "Yes" << '\n';
} else {
cout << "No" << '\n';
}
}
}
void happy_coder() {
}
int main() {
// 提升cin、cout效率
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
// 小码匠
best_coder();
// 最优解
// happy_coder();
return 0;
}