64分求助, 不知道哪里出问题
查看原帖
64分求助, 不知道哪里出问题
689146
mushezi楼主2023/10/20 15:28

谢谢

#include <bits/stdc++.h>
using namespace std;

const int N = 1e6 + 5;

int cas, n;
int arr[N];
char ans[N];
bool issolve;

bool Solve(int l1, int r1, int l2, int r2){
    int rp;
    for(int i = 2; i <= n; i++){
        rp = n*2 - i + 1;

        if(l1 < r1 && arr[l1] == arr[r1]){
            ans[i] = ans[rp] = 'L';
            l1++, r1--;
        }
        else if(l2 >= r2 && arr[l1] == arr[r2]){
            ans[i] = 'L';
            ans[rp] = 'R';
            l1++, r2++;
        }
        else if(l1 <= r1 && arr[l2] == arr[r1]){
            ans[i] = 'R';
            ans[rp] = 'L';
            r1--, l2--;
        }
        else if(r2 < l2 && arr[l2] == arr[r2]){
            ans[i] = ans[rp] = 'R';
            r2++, l2--;
        }
        else{
            return 0;
        }
    }
    return 1;
}

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);

    cin >> cas;
    while(cas--){
        cin >> n;
        for(int i = 1; i <= n*2; i++){
            cin >> arr[i];
        }

        int lp = n, rp = 1;
        for(int i = 2; i <= n*2 - 1; i++){
            if(arr[i] == arr[1]) lp = i;
            if(arr[i] == arr[n*2]) rp = i;
        }

        issolve = 0;

        ans[n*2] = 'L';
        if(Solve(2, lp - 1, n*2, lp + 1)){
            ans[1] = 'L';
            issolve = 1;
        }
        else if(Solve(1, rp - 1, n*2 - 1, rp + 1)){
            ans[1] = 'R';
            issolve = 1;
        }

        if(issolve){
            for(int i = 1; i <= n*2; i++) cout << ans[i];
        }
        else{
            cout << "-1";
        }
        cout << '\n';
    }

    return 0;
}
2023/10/20 15:28
加载中...