简单题,题目要求显然是很多次插入,所以是链表。
acm里链表出场率并不高,但是实际应用中还是蛮多的。想想一年前这个时候连c语言都不会,真是感慨。。。
插入两个语句,nxt[i] = nxt[u] 表示 i结点指向u的后继, nxt[u] = i表示把u的后继设成i。
设置一个头结点,指向一个不存在的结点,维护一下最后一个结点tail。
#include<bits/stdc++.h> using namespace std; const int maxn = 1e5+5; int nxt[maxn]; char s[maxn]; int main() { //freopen("in.txt","r",stdin); while(gets(s+1)){ int head = 0, cur = 0, tail = 0; nxt[0] = -1; for(int i = 1; s[i]; i++){ if(s[i] == ‘[‘) cur = head; else if(s[i] == ‘]‘) cur = tail; else { nxt[i] = nxt[cur]; nxt[cur] = i; if(cur == tail) tail = i; cur = i; } } for(int i = nxt[head]; ~i; i = nxt[i] ){ putchar(s[i]); } putchar(‘\n‘); } return 0; }
时间: 2024-11-03 21:13:45