求助
查看原帖
求助
305875
墨云风迹楼主2020/12/13 19:39
#include<bits/stdc++.h>
using namespace std;
int p[100][100];
int n;
char s1[100], s2[100];
int a, b;
int xa, ya, xb, yb;
int findup(int x) {
	int i = 0;
	while (i < n && p[x][i] != -1)
		i++;
	return i - 1;
}
void find() {
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			if (p[i][j] == a)
				xa = i, ya = j;
			if (p[i][j] == b)
				xb = i, yb = j;
		}
	}
}
void clear(int x, int y) {
	for (int j = y; j < n; j++) {
		p[p[x][j]][0] = p[x][j];
		p[x][j] = -1;
	}
}
void move(int xa, int ya, int xb, int yb) {
	for (int i = ya, j = yb; i < n; i++, j++) {
		p[xb][j] = p[xa][i];
		p[xa][i] = -1;
	}
}
int main() {
	cin >> n;
	for (int i = 0; i < n; i++)
		for (int j = 0; j < n; j++)
			p[i][j] = -1;
	for (int i = 0; i < n; i++)
		p[i][0] = i;
	cin >> s1;
	while (s1[0] != 'q') {
		cin >> a >> s2 >> b;
		find();
		if (xa == xb || a == b) {
			cin >> s1;
			continue;
		}
		if (s1[0] == 'm' && s2[1] == 'n')
			clear(xa, ya + 1), clear(xb, yb + 1), move(xa, ya, xb, yb + 1);
		if (s1[0] == 'm' && s2[1] == 'v')
			clear(xa, ya + 1), yb = findup(xb), move(xa, ya, xb, yb + 1);
		if (s1[0] == 'p' && s2[1] == 'n')
			clear(xb, yb + 1), move(xa, ya, xb, yb + 1);
		if (s1[0] == 'p' && s2[1] == 'v')
			yb = findup(xb), move(xa, ya, xb, yb + 1);
		cin >> s1;
	}
	for (int i = 0; i < n; i++) {
		cout << i << ":";
		for (int j = 0; j < n; j++) {
			if (p[i][j] != -1)
				cout << " " << p[i][j];
			else
				break;
		}
		cout << endl;
	}
}

本地测试没问题,切合原题面

Don’t put any trailing spaces on a line.

即没有多余空格的要求,但是仍然WA了

2020/12/13 19:39
加载中...