暴力维护指针28分求助
查看原帖
暴力维护指针28分求助
263414
Sktic楼主2022/10/21 22:06

复杂度 O(n)O(n) 但是感觉细节出了问题于是挂了。

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+10;
typedef long long ll;
inline int read()
{
    int x=0;
    char c=getchar();
    while(c<'0'||c>'9')
        c=getchar();
    while(c>='0'&&c<='9')
        x=x*10+(c-'0'),c=getchar();
    return x;
}
int a[maxn];
char ans[maxn];
int n;
inline int check(int a,int b)
{
    return (1<=a&&a<=2*n)&&(1<=b&&b<=2*n);
}
int main()
{
    int t=read();
    while(t--)
    {
        memset(a,0,sizeof(a));
        memset(ans,'\0',sizeof(ans));
        n=read();
        for(int i=1;i<=2*n;i++)
            a[i]=read();
        int xl=1,xr=2*n,ql=1,qr=1,cnt=1,flag=0;
        while(a[++ql]!=a[1]);
        xl++;if(ql==2)xl++;if(ql==2*n)xr--;
        qr=ql+1;ql--;
        ans[cnt]='L',ans[2*n-cnt+1]='L';cnt++;
        while(cnt<=n)
        {
            if(a[xl]==a[ql]&&xl<=ql&&check(xl,ql))
            {
                ans[cnt]='L',ans[2*n-cnt+1]='L',cnt++;
                xl++,ql--;
            }
            else if(a[xl]==a[qr]&&xl!=qr&&check(xl,qr))
            {
                ans[cnt]='L',ans[2*n-cnt+1]='R',cnt++;
                xl++,qr++;
            }
            else if(a[xr]==a[ql]&&xr!=ql&&check(xr,ql))
            {
                ans[cnt]='R',ans[2*n-cnt+1]='L',cnt++;
                xr--,ql--;
            }
            else if(a[xr]==a[qr]&&xr>=qr&&check(xr,qr))
            {
                ans[cnt]='R',ans[2*n-cnt+1]='R',cnt++;
                xr--,qr++;
            }
            else
            {
                flag=1;
                cout<<-1<<endl;
                break;
            }
        }
        if(flag==0)
        {
            for(int i=1;i<=2*n;i++)
                putchar(ans[i]);
            putchar('\n');
        }
    }
    return 0;
}

2022/10/21 22:06
加载中...