CSPS T3这样做思路对吗
查看原帖
CSPS T3这样做思路对吗
98509
AH3323342925楼主2021/10/27 17:40

RT 用ff数组控制回文,洛谷自测40pts

#include<iostream>
#include<cstring>
#include<cstdio>
#include<string>
using namespace std;

int a[500005], b[500005], ff[500005], T, n, t;
string sans, s;

void f(int l, int r, int k){
    if(k==2*n+1){
        t=1;
        sans=min(s, sans);
        return ;
    }
    if(k<=n){
        if(!ff[a[l]]){
            ff[a[l]]=k;
            s+='L';
            f(l+1, r, k+1);
            s.erase(s.size()-1, 1);
            ff[a[l]]=0;
        }
        if(!ff[a[r]]){
            ff[a[r]]=k;
            s+='R';
            f(l, r-1, k+1);
            s.erase(s.size()-1, 1);
            ff[a[r]]=0;
        }
    }
    else{
        if(ff[a[l]]==n*2+1-k){
            ff[a[l]]=k;
            s+='L';
            f(l+1, r, k+1);
            s.erase(s.size()-1, 1);
            ff[a[l]]=0;
        }
        if(ff[a[r]]==n*2+1-k){
            ff[a[r]]=k;
            s+='R';
            f(l, r-1, k+1);
            s.erase(s.size()-1, 1);
            ff[a[r]]=0;
        }
    }
}

int main(){
    cin>>T;
    while(T--){
        memset(ff, 0, sizeof(ff));
        cin>>n;
        s="";
        sans="";
        t=0;
        for(int i=1; i<=2*n; i++)cin>>a[i];
        for(int i=0; i<2*n; i++)sans+='R';
        f(1, 2*n, 1);
        if(t)cout<<sans<<endl;
        else cout<<-1<<endl;
    }

    return 0;
}
2021/10/27 17:40
加载中...