日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

16行代码AC——例题6-4破损的键盘(Broken Keyboard,UVa 11988)——解题报告

發(fā)布時(shí)間:2024/2/28 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 16行代码AC——例题6-4破损的键盘(Broken Keyboard,UVa 11988)——解题报告 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

勵(lì)志用盡量少的代碼做高效的表達(dá)。


題目(提交)鏈接→UVa-11988


題目大意:

輸入一個(gè)字符串,輸出在原本應(yīng)該是怎么樣的?
具體方法是:
若讀取到‘[’, 則執(zhí)行Home鍵:將光標(biāo)移到行首。
若讀取到’]’, 則執(zhí)行End鍵:將光標(biāo)移到行尾。

思路:

此題的本質(zhì)是模擬鼠標(biāo)光標(biāo)處理線性序列。
基于這個(gè)核心思想,我們只需要定義一個(gè)類型做光標(biāo),若讀到’[’,則該值移動(dòng)到序列頭部,
若讀到‘]’,則該值移動(dòng)到序列尾部。每正常讀取一個(gè)字母,該值向后挪一位。
用什么來存儲(chǔ)序列呢?本題為線性且需要大量的插入操作,故應(yīng)用鏈表做存儲(chǔ)單位, STL中封裝好的鏈表容器為:list。 存儲(chǔ)容器確定后,光標(biāo)為list的迭代器。

注意:

11行代碼中的it = l.insert(it,i),it++; 不能優(yōu)化為:it = l.insert(it++,i); 。因?yàn)楦鶕?jù)規(guī)定:除特殊情況,迭代器在一個(gè)表達(dá)式中不允許出現(xiàn)兩種不同的值, 否則會(huì)造成紊亂。

代碼:

#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(); //若為[,光標(biāo)移到頭部 else if(i == ']') it = l.end(); //若為],光標(biāo)移到尾部 else it = l.insert(it,i),it++; for(auto it : l) cout << it; //輸出 cout << '\n';}return 0; }

收獲:

1、模擬光標(biāo)類型題。
2、list容器處理大量插入刪除序列。


擇苦而安,擇做而樂。虛擬現(xiàn)實(shí)終究比不過真實(shí)精彩之萬一。

總結(jié)

以上是生活随笔為你收集整理的16行代码AC——例题6-4破损的键盘(Broken Keyboard,UVa 11988)——解题报告的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。