/ WOJ /

记录详情

System Error


  
Testdata configuration incorrect.
Memory limit larger than memory_max

代码

#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int t;
    cin >> t;
    while(t--){
        int n;
        cin >> n;
        vector<int> p(n);
        for(int i = 0; i < n; i++){
            cin >> p[i];
        }

        int l = 0, r = n - 1;
        vector<int> q;
        q.reserve(n);
        string ans;
        ans.reserve(n);

        auto can_push = [&](int x) {
            int k = static_cast<int>(q.size());
            if(k < 4) return true;
            bool inc = true, dec = true;
            for(int i = k-4; i + 1 < k; i++){
                if(q[i] >= q[i+1]) inc = false;
                if(q[i] <= q[i+1]) dec = false;
            }
            if(inc && q[k-1] < x) return false;
            if(dec && q[k-1] > x) return false;
            return true;
        };

        auto ok = [&](int x, int l2, int r2) {
            int k = static_cast<int>(q.size()) + 1;
            if(k < 4) return true;

            array<int,4> l4{};
            if(static_cast<int>(q.size()) >= 4){
                for(int i = 0; i < 3; i++){
                    l4[i] = q[q.size() - 3 + i];
                }
            } else {
                for(int i = 0; i < 3; i++){
                    l4[i] = q[i];
                }
            }
            l4[3] = x;

            bool inc = true, dec = true;
            for(int i = 0; i < 3; i++){
                if(l4[i] >= l4[i+1]) inc = false;
                if(l4[i] <= l4[i+1]) dec = false;
            }
            if(!inc && !dec) return true;

            int yL = p[l2], yR = p[r2];
            if(inc) {
                bool cL = yL <= l4[3];
                bool cR = yR <= l4[3];
                return cL || cR;
            }
                bool cL = yL >= l4[3];
                bool cR = yR >= l4[3];
                return cL || cR;
        };
        for(int step = 0; step < n; step++){
            int xL = p[l], xR = p[r];
            const bool okL = can_push(xL);
            const bool okR = can_push(xR);
            const bool sL = okL && (step == n-1 || ok(xL, l+1, r));
            bool sR = okR && (step == n-1 || ok(xR, l, r-1));
            char pick;
            if(sL && !sR) {
                pick = 'L';
            } else if(sR && !sL){
                pick = 'R';
            } else if(sL && sR){
                pick = xL < xR ? 'L' : 'R';
            } else {
                pick = 'L';
            }

            ans.push_back(pick);
            if(pick == 'L'){
                q.push_back(xL);
                l++;
            } else {
                q.push_back(xR);
                r--;
            }
        }
        cout << ans << "\n";
    }
    return 0;
}

信息

递交者
类型
递交
题目
P1000 云剪贴板
题目数据
下载
语言
C
递交时间
2025-07-28 00:01:51
评测时间
2025-07-28 00:01:51
评测机
分数
0
总耗时
0ms
峰值内存
0 Bytes