16行代码AC——例题6-4破损的键盘(Broken Keyboard,UVa 11988)——解题报告
生活随笔
收集整理的這篇文章主要介紹了
16行代码AC——例题6-4破损的键盘(Broken Keyboard,UVa 11988)——解题报告
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
勵志用盡量少的代碼做高效的表達。
題目(提交)鏈接→UVa-11988
題目大意:
輸入一個字符串,輸出在原本應該是怎么樣的?
具體方法是:
若讀取到‘[’, 則執行Home鍵:將光標移到行首。
若讀取到’]’, 則執行End鍵:將光標移到行尾。
思路:
此題的本質是模擬鼠標光標處理線性序列。
基于這個核心思想,我們只需要定義一個類型做光標,若讀到’[’,則該值移動到序列頭部,
若讀到‘]’,則該值移動到序列尾部。每正常讀取一個字母,該值向后挪一位。
用什么來存儲序列呢?本題為線性且需要大量的插入操作,故應用鏈表做存儲單位, STL中封裝好的鏈表容器為:list。 存儲容器確定后,光標為list的迭代器。
注意:
11行代碼中的it = l.insert(it,i),it++; 不能優化為:it = l.insert(it++,i); 。因為根據規定:除特殊情況,迭代器在一個表達式中不允許出現兩種不同的值, 否則會造成紊亂。
代碼:
#include<bits/stdc++.h> using namespace std; int main() { string s; while(cin >> s) {list<char>l;auto it = l.begin(); for(auto i : s) //遍歷 if(i == '[') it = l.begin(); //若為[,光標移到頭部 else if(i == ']') it = l.end(); //若為],光標移到尾部 else it = l.insert(it,i),it++; for(auto it : l) cout << it; //輸出 cout << '\n';}return 0; }收獲:
1、模擬光標類型題。
2、list容器處理大量插入刪除序列。
擇苦而安,擇做而樂。虛擬現實終究比不過真實精彩之萬一。
總結
以上是生活随笔為你收集整理的16行代码AC——例题6-4破损的键盘(Broken Keyboard,UVa 11988)——解题报告的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 30行代码AC——例题6-3 矩阵链乘(
- 下一篇: 33行代码AC——例题6-5 移动盒子(