UVa11988 Broken Keyboard 損壞的鍵盤【list】
阿新 • • 發佈:2018-03-31
問題 put this space 損壞 Go include 光標移動 keyboard
BeijuThis_is_a__text
Happy_Birthday_to_Tsinghua_University
stl 鏈表
題目鏈接:https://vjudge.net/problem/UVA-11988
題目大意:
鍵盤的home鍵和end鍵出現了問題。
在輸入一段文本時,home鍵或end鍵可能會自動被按下,home鍵會使光標移動到文章開頭,end鍵會使光標移動到文章結尾。
輸入包含多組數據,每組數據一行,包含不超過100000個字母,表示輸入文本。[表示home鍵按下,]表示end鍵按下。
對每組輸入輸出一行,表示你在顯示屏上看到的文本。
Sample Input This_is_a_[Beiju]_text [[]][][]Happy_Birthday_to_Tsinghua_University Sample Output
#include <iostream> #include <cstdio> #include <string.h> #include <list> using namespace std; char str[1000100]; int main() { while(scanf("%s",str)!=EOF){ list<char> l; list<char>::iterator p = l.begin();int len = strlen(str); for(int i=0; i<len; i++){ if(str[i]==‘[‘)p = l.begin(); else if(str[i]==‘]‘)p = l.end(); else l.insert(p, str[i]); } for(p = l.begin(); p!=l.end(); ++p)cout << *p; cout << endl; } return 0; }
模擬鏈表
#include <iostream> #include<string.h> #include <algorithm> using namespace std; const int maxn = 100000 + 5; char buf[maxn]; int Next[maxn]; int main(){ int cur, last,n; while (scanf("%s", buf+1)!=EOF){ n = strlen(buf + 1); cur = last = 0; for (int i = 1; i <= n; i++){ if (buf[i] == ‘[‘)cur = 0; //house鍵 else if (buf[i] == ‘]‘)cur = last; //end鍵 else{ Next[i] = Next[cur]; //字符i的下一個位置為cur的下一個位置 Next[cur] = i; //curr的下一個位置為i //更新cur和last if (cur == last)last = i; //cur等於i表示光標在顯示屏最後一個字符 cur = i; //移動光標 } } Next[last] = 0; //結束位置 for (int i = Next[0]; i != 0; i = Next[i]) printf("%c", buf[i]); printf("\n"); } return 0; }
2018-03-30
UVa11988 Broken Keyboard 損壞的鍵盤【list】