#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) 回帖