0
点赞
收藏
分享

微信扫一扫

UVA227 谜题 Puzzle

E_topia 2022-01-12 阅读 45

第一道难度为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;
}
举报

相关推荐

0 条评论