求助
查看原帖
求助
661766
Lee0x01楼主2023/8/21 11:25

为啥第一个样例也会错, 我在本地输出和样例结果一样,wa信息显示too short one line 5

#include <bits/stdc++.h>

using i64 = long long;

// void out(std::deque<int> q1) {
// 	for (auto &x: q1) {
// 		std::cout << x << " ";
// 	}
// 	puts("");
// }

int judge(std::deque<int> &q1, std::deque<int> &q2) {
	if (!q1.size()) return 0;
	if (q1.front() == q1.back() && q1.size() != 1) return 1;
	if (!q2.size()) return 0;
	if (q1.front() == q2.back()) return 2;
}

std::string solve2(std::deque<int> &q1, std::deque<int> &q2) {
	std::string s1, s2;

	while (q1.size() || q2.size()) {
		// out(q1), out(q2);
		int st1 = judge(q1, q2), st2 = judge(q2, q1);

		if (st1) {
			if (st1 == 1) q1.pop_back(), s2 = "L" + s2;
			else q2.pop_back(), s2 = "R" + s2;

			q1.pop_front();

			s1.push_back('L');
		} else if (st2) {
			if (st2 == 1) q2.pop_back(), s2 = "R" + s2;
			else q1.pop_back(), s2 = "L" + s2;
 
			q2.pop_front();
			
			s1.push_back('R');
		} else {
			return "-1";
		}
	}

	return s1 + s2;
}

void solve() {
	int n;

	std::cin >> n;

	std::string ans1, ans2;

	std::vector<int> vec(2 * n);

	for (auto &x: vec) std::cin >> x;

	int pos1 = std::find(vec.begin() + 1, vec.end(), vec[0]) - vec.begin();
	
	int pos2 = std::find(vec.begin(), vec.end() - 1, vec[2 * n - 1]) - vec.begin();
	
	std::deque<int> q1, q2;

	for (int i = 1; i < pos1; i ++) q1.push_back(vec[i]);

	for (int i = 2 * n - 1; i > pos1; i --) q2.push_back(vec[i]);

	std::string t1, t2;

	t1 = solve2(q1, q2);

	if (t1 == "-1") std::string(2 * n, 'Z');
	else ans1 = "L" + t1 + "L";

	q1.clear(), q2.clear();

	for (int i = 0; i < pos2; i ++) q1.push_back(vec[i]);

	for (int i = 2 * n - 2; i > pos2; i --) q2.push_back(vec[i]);

	t2 = solve2(q1, q2);
	
	if (t2 == "-1") ans2 = std::string(2 * n, 'Z');
	else ans2 = "R" + t2 + "L";

	if (t1 == "-1" && t2 == "-1") std::cout << -1 << "\n";
	else {
		std::cout << std::min(ans1, ans2) << "\n";
	}

	// puts("");
}

int main() {
	int _;

	std::cin >> _;

	while (_ --) { solve(); }
}
2023/8/21 11:25
加载中...