96pt TLE on #17#21 求调
查看原帖
96pt TLE on #17#21 求调
773503
Falling_Sakura楼主2023/10/18 15:29

是 STL 太慢了吗?

#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 1e5;

int a[N];
int n;

inline int read()
{
    int x = 0, y = 1;
    char c = getchar();
    while(c < '0' || c > '9')
    {
        if(c == '-') y = -1;
        c = getchar();
    }
    while(c >= '0' && c <= '9')
    {
        x = (x << 1) + (x << 3) + c - '0';
        c = getchar();
    }
    return x * y;
}

string solve()
{
    string res, res1, res2;
    deque<int> q1;
    deque<int> q2;
    q1.push_back(a[1]);
    bool bj = false;
    for(int i = 2; i <= 2 * n; i++)
    {
        if(a[i] == a[1]) bj = true;
        if(!bj) q1.push_back(a[i]);
        else q2.push_front(a[i]);
    }
    bj = false;
    for(int i = 1; i <= n; i++)
    {
        int a1 = 0, a2 = 0, b1 = 0, b2 = 0;
        if(!q1.empty())
        {
            a1 = q1.front();
            a2 = q1.back();
        }
        if(!q2.empty())
        {
            b1 = q2.front();
            b2 = q2.back();
        }
        if((int)q1.size() != 1 && a1 == a2 && a1)
        {
            res1 += 'L';
            res2 = 'L' + res2;
            q1.pop_front();
            q1.pop_back();
        }
        else if(a1 == b2 && a1)
        {
            res1 += 'L';
            res2 = 'R' + res2;
            q1.pop_front();
            q2.pop_back();
        }
        else if(a2 == b1 && a2)
        {
            res1 += 'R';
            res2 = 'L' + res2;
            q1.pop_back();
            q2.pop_front();
        }
        else if((int)q2.size() != 1 && b1 == b2 && b1)
        {
            res1 += 'R';
            res2 = 'R' + res2;
            q2.pop_front();
            q2.pop_back();
        }
        else
        {
            bj = true;
            break;
        }
    }
    if(!bj) return res1 + res2;
    res1.clear();
    res2.clear();
    q1.clear();
    q2.clear();
    q2.push_back(a[n * 2]);
    bj = false;
    for(int i = 2 * n - 1; i >= 1; i--)
    {
        if(a[i] == a[n * 2]) bj = true;
        if(!bj) q2.push_back(a[i]);
        else q1.push_front(a[i]);
    }
    for(int i = 1; i <= n; i++)
    {
        int a1 = 0, a2 = 0, b1 = 0, b2 = 0;
        if(!q1.empty())
        {
            a1 = q1.front();
            a2 = q1.back();
        }
        if(!q2.empty())
        {
            b1 = q2.front();
            b2 = q2.back();
        }
        if((int)q1.size() != 1 && a1 == a2 && a1)
        {
            res1 += 'L';
            res2 = 'L' + res2;
            q1.pop_front();
            q1.pop_back();
        }
        else if(a1 == b2 && a1)
        {
            res1 += 'L';
            res2 = 'R' + res2;
            q1.pop_front();
            q2.pop_back();
        }
        else if(a2 == b1 && a2)
        {
            res1 += 'R';
            res2 = 'L' + res2;
            q1.pop_back();
            q2.pop_front();
        }
        else if((int)q2.size() != 1 && b1 == b2 && b1)
        {
            res1 += 'R';
            res2 = 'R' + res2;
            q2.pop_front();
            q2.pop_back();
        }
        else return "NO";
    }
    return res1 + res2;
}

int main()
{
    // freopen("E:\\下载\\palin\\palin\\palin2.in", "r", stdin);
    // freopen("E:\\下载\\palin\\palin\\palin2.out", "w", stdout);
    int t;
    scanf("%d", &t);
    while(t--)
    {
        n = read();
        for(int i = 1; i <= 2 * n; i++)
        {
            a[i] = read();
        }
        string ans = solve();
        if(ans == "NO")
            puts("-1");
        else
        {
            ans[ans.size() - 1] = 'L';
            cout << ans << endl;
        }
    }
    return 0;
}
2023/10/18 15:29
加载中...