为啥只有40分啊
查看原帖
为啥只有40分啊
763721
3207414165lll楼主2023/3/18 16:32
#include<iostream>
#include<math.h>
#include<algorithm>
#include<cstring>
using namespace std;
int a[1000005], c[1000005], d[1000005], a1[1000005], c1[1000005], d1[1000005];
char b[1000005], b1[1000005];
int t, n, flag1 = 0, flag2 = 0;
int find(int a[], int n,int v) {
	for (int i = 2; i <= 2 * n; i++) {
		if (a[i] == v)return i;
	}
	return -1;
}
int main()
{
	cin >> t;
	for (int i = 0; i < t; i++) {
		//memset(a, 0, sizeof(a));
		//memset(b, 0, sizeof(b));
		//memset(b1, 0, sizeof(b1));
		//memset(c, 0, sizeof(c));
		//memset(c1, 0, sizeof(c1));
		//memset(d, 0, sizeof(d));
		//memset(d1, 0, sizeof(d1));
		cin >> n;
		//left
		flag1 = 0;
		for (int j = 1; j <= 2 * n; j++) {
			cin >> a[j];
			a1[2 * n - j + 1] = a[j];
		}
		int num = find(a, n, a[1]);
		b[1] = 'L';
		b[2 * n] = 'L';
		if (num == 2) {
			for (int j = 2 * n; j >= num + 1; j--) {
				d[2 * n - j + num + 1] = a[j];
			}
		}
		else if (num == 2 * n) {
			for (int j = 2; j <= num - 1; j++) {
				c[j] = a[j];
			}
		}
		else {
			for (int j = 2; j <= num - 1; j++) {
				c[j] = a[j];
			}
			for (int j = 2 * n; j >= num + 1; j--) {
				d[2 * n - j + num + 1] = a[j];
			}
		}
		char* bb = &b[2];
		char* be = &b[2 * n - 1];
		int* cb = &c[2];
		int* ce = &c[num - 1];
		int* db = &d[num+1];
		int* de = &d[2 * n];
		while (cb <= ce && db <= de) {
			if (*cb == *de) {
				*bb = 'L';
				*be = 'R';
				bb++, cb++, be--, de--;
			}
			else if (*cb == *ce && cb != ce) {
				*bb = 'L';
				*be = 'L';
				bb++, be--, cb++, ce--;
			}
			else if (*db == *de && db != de) {
				*bb = 'R';
				*be = 'R';
				bb++, db++, be--, de--;
			}
			else if (*db == *ce) {
				*bb = 'R';
				*be = 'L';
				bb++, db++, be--, ce--;
			}
			else {
				flag1 = 1;
				break;
			}
		}
		if (flag1 == 0) {
			if (cb > ce&&db<=de) {
				flag1 = 0;
				while (db <= de) {
					if (*db == *de) {
						*bb = 'R';
						*be = 'R';
						bb++, db++, be--, de--;
					}
					else {
						flag1 = 1;
						break;
					}
				}
			}
			else if (db > de&&cb<=ce) {
				flag1 = 0;
				while (cb <= ce) {
					if (*cb == *ce) {
						*bb = 'L';
						*be = 'L';
						bb++, cb++, be--, ce--;
					}
					else {
						flag1 = 1;
						break;
					}
				}
			}
		}
		//right
		flag2 = 0;
		num = find(a1, n, a1[1]);
		b1[1] = 'R';
		b1[2 * n] = 'R';
		if (num == 2) {
			for (int j = 2 * n; j >= num + 1; j--) {
				d1[2 * n - j + num + 1] = a[j];
			}
		}
		else if (num == 2 * n) {
			for (int j = 2; j <= num - 1; j++) {
				c1[j] = a[j];
			}
		}
		else {
			for (int j = 2; j <= num - 1; j++) {
				c1[j] = a[j];
			}
			for (int j = 2 * n; j >= num + 1; j--) {
				d1[2 * n - j + num + 1] = a[j];
			}
		}
		bb = &b1[2];
		be = &b1[2 * n - 1];
		cb = &c1[2];
		ce = &c1[num - 1];
		db = &d1[num+1];
		de = &d1[2 * n];
		while (cb <= ce && db <= de) {
		    if (*db == *ce) {
			*bb = 'L';
			*be = 'R';
			bb++, db++, be--, ce--;
		    }
			else if (*db == *de && db != de) {
				*bb = 'L';
				*be = 'L';
				bb++, db++, be--, de--;
			}
			else if (*cb == *ce && cb != ce) {
				*bb = 'R';
				*be = 'R';
				bb++, be--, cb++, ce--;
			}
			else if (*cb == *de) {
				*bb = 'R';
				*be = 'L';
				bb++, cb++, be--, de--;
			}
			else {
				flag2 = 1;
				break;
			}
		}
		if (flag2 == 0) {
			if (cb > ce&&db<=de) {
				flag2 = 0;
				while (db <= de) {
					if (*db == *de) {
						*bb = 'L';
						*be = 'L';
						bb++, db++, be--, de--;
					}
					else {
						flag2 = 1;
						break;
					}
				}
			}
			else if (db > de&&cb<=ce) {
				flag2 = 0;
				while (cb <= ce) {
					if (*cb == *ce) {
						*bb = 'R';
						*be = 'R';
						bb++, cb++, be--, ce--;
					}
					else {
						flag2 = 1;
						break;
					}
				}
			}
		}
		if (flag1 == 0) {
			for (int i = 1; i <= 2 * n; i++) {
				cout << b[i];
			}
			cout << endl;
		}
		else if (flag1 == 1 && flag2 == 0) {
			for (int i = 1; i <= 2 * n; i++) {
				cout << b1[i];
			}
			cout << endl;
		}
		else {
			cout << "-1" << endl;
		}
	}
	return 0;
}
2023/3/18 16:32
加载中...