1、uva 11988 Broken Keyboard
题意:给出键盘打字的顺序,遇到[到句首,遇到]倒句末。求最后输出的句子。
思路:
①单向链表数组模拟
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 using namespace std; 5 const int maxn = 100100; 6 char s[maxn]; 7 int Next[maxn]; 8 int main() 9 { 10 while (~scanf("%s", s + 1)) 11 { 12 int len = strlen(s + 1); 13 Next[0] = 0; 14 int cur = 0, last = 0; 15 for (int i = 1; i <= len; i++) 16 { 17 if (s[i] == '[')cur=0 ; 18 else if (s[i] == ']') cur = last; 19 else 20 { 21 Next[i] = Next[cur]; 22 Next[cur] = i; 23 if (last == cur) last = i; 24 cur = i; 25 } 26 } 27 for (int i = Next[0]; i != 0; i = Next[i]) printf("%c", s[i]); 28 printf("\n"); 29 } 30 return 0; 31 }