竞赛讨论区 > D题求解
头像
fairyduck
发布于 02-17 19:29
+ 关注

D题求解

#include <bits/stdc++.h>
using namespace std;

const int N = 2e5 + 50;
struct Node{
    char ch;
    int left,right;
}a[N];

int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n,k,m;
    cin >> n >> k;
    for(int i = 1;i <= n;i++){
        cin >> a[i].ch;
        if(a[i].ch == 'I') m = i;
        a[i].left = i - 1;
        a[i].right = i + 1;
    }
    while(k--){
        string s;
        cin >> s;
        if(s == "backspace"){
            if(m > 1){
                if(a[a[m].left].ch == '(' && a[a[m].right].ch == ')'){
                    a[a[m].left].ch = '0',a[a[m].right].ch = '0';
                    a[m].left = a[a[m].left].left;
                    a[m].right = a[a[m].right].right;
                    a[a[m].left].right = m;
                    a[a[m].right].left = m;
                }
                else{
                    a[a[m].left].ch = '0';
                    a[m].left = a[a[m].left].left;
                    a[a[m].left].right = m;
                }
            }
        }
        if(s == "delete"){
            if(m < n){
                a[a[m].right].ch = '0';
                a[m].right = a[a[m].right].right;
                a[a[m].right].left = m;
            }
        }
        if(s == "<-"){
            if(m > 1){
                a[m].ch = a[a[m].left].ch;
                a[a[m].left].ch = 'I';
                m = a[m].left;
            }
        }
        if(s == "->"){
            if(m < n){
                a[m].ch = a[a[m].right].ch;
                a[a[m].right].ch = 'I';
                m = a[m].right;
            }
        }
    }
    for(int i = 1;i <= n;i++){
        if(a[i].ch != '0') cout << a[i].ch;
    }
    // cout << "\n\n";
    // for(int i = 1;i <= n;i++){
    //     cout << i << " " << a[i].ch << " " << a[i].left << " " << a[i].right << "\n";
    // }


    return 0;
}

left和right记录下标 为什么只有五十的正确率

全部评论

(1) 回帖
加载中...
话题 回帖

等你来战

查看全部

热门推荐