社区讨论
50玄关求条
P11228[CSP-J 2024] 地图探险参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mhjde9bi
- 此快照首次捕获于
- 2025/11/04 00:44 4 个月前
- 此快照最后确认于
- 2025/11/04 00:44 4 个月前
代码应该算是简单易懂吧.....
CPP#include<bits/stdc++.h>
using namespace std;
int mp[1005][1005];
int main() {
int T;
cin >> T;
for (int i = 1; i <= T; i++) {
int n, m, k, x, y, d;
cin >> n >> m >> k >> x >> y >> d;
char o;
for (int j = 1; j <= n; j++) {
for (int l = 1; l <= m; l++) {
cin >> o;
if (o == 'x') {
mp[j][l] = 1;
}
}
}
int ans = 1;
for (int j = 1; j <= k; j++) {
/*for (int j = 1; j <= n; j++) {
for (int l = 1; l <= m; l++) {
cout << mp[i][j] << " ";
}
cout << endl;
}*/
switch (d) {
case 0: {
int xx = x;
int yy = y + 1;
if (mp[xx][yy] != 1 && 1 <= xx && xx <= n && 1 <= yy && yy <= m) {
x = xx;
y = yy;
if (mp[x][y] == 0) {
ans++;
mp[x][y] = 2;
}
} else {
d = (d + 1) % 4;
}
break;
}
case 1: {
int xx = x + 1;
int yy = y;
if (mp[xx][yy] != 1 && 1 <= xx && xx <= n && 1 <= yy && yy <= m) {
x = xx;
y = yy;
if (mp[x][y] == 0) {
ans++;
mp[x][y] = 2;
}
} else {
d = (d + 1) % 4;
}
break;
}
case 2: {
int xx = x;
int yy = y - 1;
if (mp[xx][yy] != 1 && 1 <= xx && xx <= n && 1 <= yy && yy <= m) {
x = xx;
y = yy;
if (mp[x][y] == 0) {
ans++;
mp[x][y] = 2;
}
} else {
d = (d + 1) % 4;
}
break;
}
case 3: {
int xx = x - 1;
int yy = y;
if (mp[xx][yy] != 1 && 1 <= xx && xx <= n && 1 <= yy && yy <= m) {
x = xx;
y = yy;
if (mp[x][y] == 0) {
ans++;
mp[x][y] = 2;
}
} else {
d = (d + 1) % 4;
}
break;
}
}
}
cout << ans << endl;
for (int j = 1; j <= n; j++) {
for (int l = 1; l <= m; l++) {
mp[j][l] = 0;
}
}
}
return 0;
}
飞机一坐,博莱恩特
回复
共 1 条回复,欢迎继续交流。
正在加载回复...