1 solutions
-
0
#include<bits/stdc++.h> using namespace std; const int N=500010*2; int n; int w[N]; int find(int l,int r,int x) //找到l到rx出现的位置 { for(int i=l;i<=r;i++) { if(w[i]==x) { return i; } } return -1; } string work(int l1,int r1,int l2,int r2) { string a,b; //a表示先选,b表示后选 for(int i=1;i<n;i++) //还剩余n-1对数字 { if(l1<r1&&w[l1]==w[r1]) //第一段里面 { a+='L',b+='L'; l1++,r1--; } else if(l1<=r1&&l1<=r2&&w[l1]==w[l2]) //先取左边,再取右边 { a+='L',b+='R'; l1++,l2++; } else if(l1<=r1&&l2<=r2&&w[r2]==w[r1]) //先取右边,再取左边 { a+='R',b+='L'; r2--,r1--; } else if(l2<r2&&w[l2]==w[r2]) //只能从右边取 { a+='R',b+='R'; l2++,r2--; } else return "."; } reverse(b.begin(),b.end()); //翻转一下 return a+b; } int main() { int T; cin>>T; while(T--) { cin>>n; for(int i=0;i<2*n;i++) { cin>>w[i]; } int t=find(1,n*2-1,w[0]); //从左边选 string res="L"+work(1,t-1,t+1,2*n-1)+"L"; if(res!="L.L") puts(res.c_str()); else { t=find(0,n*2-2,w[n*2-1]); //从右边选 res="R"+work(0,t-1,t+1,n*2-2)+"L"; if(res!="R.L") puts(res.c_str()); else puts("-1"); } } return 0; }
Information
- ID
- 1148
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 10
- Tags
- # Submissions
- 11
- Accepted
- 2
- Uploaded By