68分tle求助
查看原帖
68分tle求助
616284
GREAT_GUIDA楼主2022/10/25 09:19

我觉得这代码应该是o(n)啊,为啥不过

#include<bits/stdc++.h>
#define ll long long
#define fo(i, j, k) for(i = j; i <= k; i++)
#define of(i, j, k) for(i = k; i >= j; i--)
using namespace std;
ll a[1001000], b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z; 
ll minn, maxx, ans, ind;
deque<ll> A, B;
char S[1001000];
ll get(deque<ll> D, ll b)
{
	//if(D.empty())return g--;
	return b ? D.front() : D.back();
}

int main()
{
	scanf("%lld", &t);
	while(t--)
	{
		scanf("%lld", &n);
		fo(i, 1, n * 2)scanf("%lld", &a[i]);
		fo(p, 0, 1)
		{
			fo(i, 2, n * 2)if(a[i] == ((p == 0) ? a[1] : a[n * 2]))break;
			A.clear();
			B.clear();
			of(j, 1, i)A.push_front(a[j]);
			fo(j, i + 1, n * 2)B.push_front(a[j]);
			ind = 0;
			while(!(A.empty() && B.empty()))
			{
				if(A.size() > 1 && get(A, 1) == get(A, 0))
				{
					A.pop_front();
					A.pop_back();
					S[ind] = 'L';
					S[n * 2 - 1 - ind] = 'L';
				}
				else if(!(A.empty() || B.empty()) && get(A, 1) == get(B, 0))
				{
					A.pop_front();
					B.pop_back();
					S[ind] = 'L';
					S[n * 2 - 1 - ind] = 'R';
				}
				else if(!(A.empty() || B.empty()) && get(B, 1) == get(A, 0))
				{
					B.pop_front();
					A.pop_back();
					S[ind] = 'R';
					S[n * 2 - 1 - ind] = 'L';
				}
				else if(B.size() > 1 && get(B, 1) == get(B, 0))
				{
					B.pop_front();
					B.pop_back();
					S[ind] = 'R';
					S[n * 2 - 1 - ind] = 'R';
				}
				else break;
				ind += 1;
			}
			if(ind == n)
			{
				fo(i, 0, n * 2 - 1)putchar(S[i]);
				break;
			}
			else if(p == 1)cout << -1;
		}
		cout << endl;
	}
	return 0;
}
2022/10/25 09:19
加载中...