rt,代码如下(根据记忆写下的)
#include <bits/stdc++.h>
using namespace std;
int solve(int n, int m, int k, int x, int y, int d, char map[1001][1001]) {
int sum = 0;
int f[1002][1002];
for (int i = 0; i <= n + 1; i++) {
for (int j = 0; j <= m + 1; j++) {
if (map[i][j] == '.') f[i][j] = 0;
else f[i][j] = -1;
}
}
f[x][y] = 1;
for (int i = 1; i <= k; i++) {
if (d == 0) {
if (f[x][y + 1] == -1) {
d = (d + 1) % 4;
continue;
}
y++;
f[x][y + 1] = 1;
continue;
}
if (d == 1) {
if (f[x + 1][y] == -1) {
d = (d + 1) % 4;
continue;
}
x++;
f[x + 1][y] = 1;
continue;
}
if (d == 2) {
if (f[x][y - 1] == -1) {
d = (d + 1) % 4;
continue;
}
y--;
f[x][y - 1] = 1;
continue;
}
if (d == 3) {
if (f[x - 1][y] == -1) {
d = (d + 1) % 4;
continue;
}
x--;
f[x - 1][y] = 1;
continue;
}
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (f[i][j] == 1) sum++;
}
}
return sum;
}
int main(){
int T, N[6], M[6], K[6], X[6], Y[6], D[6], ans[6];
char MAP[6][1001][1001];
cin >> T;
for (int a = 1; a <= T; a++) {
cin >> N[a] >> M[a] >> K[a] >> X[a] >> Y[a] >> D[a];
for (int i = 1; i <= N[a]; i++) {
for (int j = 1; j <= M[a]; j++) cin >> MAP[a][i][j];
}
ans[a] = solve(N[a], M[a], K[a], X[a], Y[a], D[a], MAP[a]);
}
for (int i = 1; i <= T; i++) cout << ans[i];
return 0;
}
经排查,是数组MAP[6][1001][1001]出了问题,是范围定义太大了吗?考试时在NOI Linux2.0环境下编译,样例全过,运行没有问题,有人知道问题吗?