在本机过不了样例,评测直接AC
查看原帖
在本机过不了样例,评测直接AC
498837
Laoshan_PLUS楼主2023/8/18 19:27

自己写的代码怎么改都 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

诸位可以在自己电脑上试一下,真的无语……

2023/8/18 19:27
加载中...