自己写的代码怎么改都 WA,于是借鉴了题解区 @Zlc晨鑫 的代码,代码如下:
#include <bits/stdc++.h>
#define error "This puzzle has no final configuration."
using namespace std;
string a[5];
int main() {
// freopen("test.in", "r", stdin);
// freopen("test.out", "w", stdout);
int kase = 0;
bool first = 1;
while (true) {
for (int i = 0; i < 5; i++) a[i] = "";
char ch = getchar();
if (ch == '\n') ch = getchar();
if (ch == 'Z') return 0;
a[0] += ch;
string s;
for (int i = 0; i < 5; i++) {
getline(cin, s, '\n');
a[i] += s;
}
getline(cin, s, '0');
int p = 0, q = 0;
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (a[i][j] == ' ') {
p = i, q = j;
break;
}
}
}
bool flag = 0;
for (int i = 0; i < s.size(); i++) {
if (s[i] == 'A') {
if (p - 1 < 0) {
flag = 1;
break;
}
a[p][q] = a[p - 1][q];
a[p - 1][q] = ' ';
p--;
} else if (s[i] == 'B') {
if (p + 1 >= 5) {
flag = 1;
break;
}
a[p][q] = a[p + 1][q];
a[p + 1][q] = ' ';
p++;
} else if (s[i] == 'L') {
if (q - 1 < 0) {
flag = 1;
break;
}
a[p][q] = a[p][q - 1];
a[p][q - 1] = ' ';
q--;
} else if (s[i] == 'R') {
if (q + 1 >= 5) {
flag = 1;
break;
}
a[p][q] = a[p][q + 1];
a[p][q + 1] = ' ';
q++;
}
}
if (!first) putchar('\n');
first = 0;
printf("Puzzle #%d:\n", ++kase);
if (flag) puts(error);
else {
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 4; j++) printf("%c ", a[i][j]);
putchar(a[i][4]);
putchar('\n');
}
}
}
return 0;
}
在本机完全过不了,WA 的那种 (不是 PE),但到了评测机上直接 AC
诸位可以在自己电脑上试一下,真的无语……