第一道难度为3的题,难度比之前的有提升,主要是两个坑点,第一个是如果空格是一行的最后一个,那么不会被输入,需要自己去补,第二个坑点是指令序列可能不止一行,还有就是输入需要注意一下
#include <bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define mk make_pair
#define sz(x) ((int) (x).size())
#define all(x) (x).begin(), (x).end()
using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef pair<int, int> pa;
int main() {
string str;
int ok1 = 0;
int cnt = 1;
while (getline(cin, str) && str != "Z") {
if (ok1++) cout << endl;
cout << "Puzzle #" << cnt++ << ":" << endl;
string s[5];
s[0] = str;
for (int i = 1; i < 5; i++) getline(cin, s[i]);
for (int i = 0; i < 5; i++) {
if (sz(s[i]) == 4) s[i] += ' ';
}
int x, y;
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (s[i][j] == ' ') x = i, y = j;
}
}
string order;
int ok = 1;
while (getline(cin, order)) {
for (int i = 0; i < sz(order); i++) {
if (order[i] == 'A') {
if (x == 0) ok = 0;
else { swap(s[x][y], s[x - 1][y]); x--; }
} else if (order[i] == 'B') {
if (x == 4) ok = 0;
else { swap(s[x][y], s[x + 1][y]); x++; }
} else if (order[i] == 'L') {
if (y == 0) ok = 0;
else { swap(s[x][y], s[x][y - 1]); y--; }
} else if (order[i] == 'R') {
if (y == 4) ok = 0;
else { swap(s[x][y], s[x][y + 1]); y++; }
}
}
if (order[sz(order) - 1] == '0') break;
}
if (ok) {
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
cout << s[i][j] << (j < 4 ? " " : "\n");
}
}
} else cout << "This puzzle has no final configuration." << endl;
}
return 0;
}