破损的键盘(UVa 11988)
s[] 数组用来保存原有的字符序列
nex[] 数组记录打印的下标顺序
C++11 代码如下:
1 #include<iostream> 2 #include<cstring> 3 using namespace std; 4 #define maxn 100006 5 char s[maxn]; 6 int nex[maxn], n; 7 8 int main() { 9 while (cin >> s + 1) { 10 int cur = 0, last = 0; 11 nex[0] = 0; 12 char ch; 13 for (int i = 1; i <=strlen(s + 1); i++) { 14 ch = s[i]; 15 if (ch == '[') cur = 0; 16 else if (ch == ']') cur = last; 17 else { 18 nex[i] = nex[cur]; 19 nex[cur] = i; 20 if (cur == last)last = i; 21 cur = i; 22 } 23 } 24 for (int i = nex[0]; i != 0; i = nex[i]) 25 cout << s[i]; 26 cout << endl; 27 } 28 return 0; 29 }