求问,完全没懂
查看原帖
求问,完全没懂
1079004
MelancholyZ楼主2025/7/28 12:05

做法是双指针加上讨论,但是第二个点就RE了

#include<bits/stdc++.h>

using namespace std;

const int Maxn = 1e5 + 5;
int n, t, p[Maxn], q[Maxn];
char s[Maxn];

int main(){
    cin >> t;
    while(t --){
        memset(s, 0, sizeof(s));
        cin >> n;
        for(int i = 1; i <= n; i ++) cin >> p[i];

        int i = 1, j = n, cnt = 0;

        while(i < j){
            if(cnt == 0){
                q[++ cnt] = p[i ++];
                s[cnt] = 'L';
                continue;
            }

            if(q[cnt] > q[cnt - 1]){
                if(p[i] > q[cnt] && p[j] > q[cnt]){
                    if(p[i] > p[j]){
                        q[++ cnt] = p[i ++];
                        s[cnt] = 'L';
                        q[++ cnt] = p[j --];
                        s[cnt] = 'R';
                    }
                    else{
                        q[++ cnt] = p[j --];
                        s[cnt] = 'R';
                        q[++ cnt] = p[i ++];
                        s[cnt] = 'L';
                    }
                }
                else{
                    if(p[i] < p[j]){
                        q[++ cnt] = p[i ++];
                        s[cnt] = 'L';
                    }
                    else{
                        q[++cnt] = p[j --];
                        s[cnt] = 'R';
                    }
                }
            } 

            else{
                if(p[i] < q[cnt] && p[j] < q[cnt]){
                    if(p[i] < p[j]){
                        q[++ cnt] = p[i ++];
                        s[cnt] = 'L';
                        q[++ cnt] = p[j --];
                        s[cnt] = 'R';
                    }
                    else{
                        q[++ cnt] = p[j --];
                        s[cnt] = 'R';
                        q[++ cnt] = p[i ++];
                        s[cnt] = 'L'; 
                    }
                }
                else{
                    if(p[i] > p[j]){
                        q[++ cnt] = p[i ++];
                        s[cnt] = 'L';
                    }
                    else{
                        q[++ cnt] = p[j --];
                        s[cnt] = 'R';
                    }
                }
            }
        }
        s[++ cnt] = 'L';
        for(int i = 1; i <= n; i ++) cout << s[i];
        cout << '\n';
    }

    return 0;
}
2025/7/28 12:05
加载中...