行业知识
小苯的IDE括号问题(CD) -----牛客小白月赛87(双链表)
2026-10-19 05:09:34
来源:互联网转载
C题:C-小苯的IDE括号问题(easy)_牛客小白月赛87 (nowcoder.com)
D题: D-小苯的IDE括号问题(hard)_牛客小白月赛87 (nowcoder.com)
��
C题代码:
#includeusing namespace std;const int N = 2e5+10;int n,k;int l[N],r[N];//删除操作void remove(int x){ r[l[x]] = r[x]; l[r[x]] = l[x];}int main(){ cin.tie(nullptr)->ios::sync_with_stdio(false); cin >> n >> k; string s; cin >> s; //做一个标记头尾哨子 s = "L" + s + "R"; int pos = 0; //标记位置,用来去找鼠标I的位置 for(int i=1;i str; if(str == "backspace") { if(s[l[pos]] == '(' && s[r[pos]] == ')') { remove(l[pos]); remove(r[pos]); } else{ if(s[l[pos]] == 'L') continue; remove(l[pos]); } } else{ if(s[r[pos]] == 'R') continue; remove(r[pos]); } } for(int i=r[0];i!=s.size()-1;i=r[i]) cout ios::sync_with_stdio(false); cin >> n >> k; string s; cin >> s; s = "L" + s + "R"; int pos = 0; for(int i=1;i str; if(str == "backspace") { if(s[l[pos]] == '(' && s[r[pos]] == ')') { remove(l[pos]); remove(r[pos]); } else{ if(s[l[pos]] == 'L') continue; remove(l[pos]); } } else if(str == "delete") { //注意:这块一定要仔细读题不要落条件,不写会超时(本人的错) if(s[r[pos]] == 'R') continue; remove(r[pos]); } else if(str == "->") { if(s[r[pos]] != 'R') { //交换只改变原数组,不改变双链表 //删除只改变双链表,不改变原数组 int idx = r[pos]; swap(s[idx],s[pos]); pos = idx; //一定要挪动一下pos的位置 } } else { if(s[l[pos]]!='L') { int idx = l[pos]; //这里交换原数组不会改变,双链表数组 swap(s[idx],s[pos]); pos = idx; } } } //遍历链表 for(int i=r[0];i!=s.size()-1; i=r[i]) cout
下一篇:为什么想要那个?