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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ACM练习 愚人节拆括号【vector的清空 栈的使用】

發布時間:2024/2/28 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ACM练习 愚人节拆括号【vector的清空 栈的使用】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

關于vector的清空

vectorname.clear();

vectorname.clear()函數并不會把所有元素清零,vector有兩個參數,一個是size,表示當前vector容器內存儲的元素個數,一個是capacity,表示當前vector在內存中申請的這片區域所能容納的元素個數。

通常capacity會比size大,如果往vector中push_back數據,這樣就不用重新申請內存和拷貝元素到新內存區域了,便于節省時間。

所以vector.clear()的真正作用是:把size設置成0,capacity不變

但是在本題中,使用vectorname.clear(),在每次循環開始的時候把vector設置為空容器,還是可以的。

C++ STL庫中有專門的stack,在頭文件中包含<stack>即可,下面代碼貼出了兩種方法,一種是直接使用stack,另一種是使用vector模擬出stack的效果。

描述

愚人節到了,祝大家節日快樂~作為源代碼的主要領導人,DarkZero同學想了個愚弄大家的好辦法——送禮物。嘿嘿,不要想的太好,哪兒能給你們那么輕易空手套白狼,DarkZero為了愚人,準備了很多套娃,其中有一個套娃里面裝了禮物,這個套娃里也可能還有套娃,為的就是讓你稍微不注意就沒看到禮物。套娃里面可以再放若干個套娃,也可以不放,完全看他心情。用[]表示一個套娃,G表示禮物,DarkZero想讓你幫他算出愚人指數,即運氣最好的人需要打開多少個套娃就能拿到禮物。

輸入
第一行包含一個整數T,代表測試樣例數。
接下來每行代表一個測試樣例,每行中有一個字符串,包含’[’,’]'和’G’三種字符。每行長度不超過200。

輸出
對每個測試樣例輸出一行,一行中包含一個數字,代表最少需要打開的套娃數。

樣例輸入

2 [[G]] [G][]

樣例輸出

2 1

提示
這道題目可以使用簡單的動態規劃來求解,或者使用搜索加剪枝的方法。測試樣例有很多,寫的不好可能會超時。

我的測試用例

輸入:[[[[][[[[]]][[][[]][][][][][[[[]]]]]]][G]
答案:1

代碼

方法1:vector

#include<iostream> #include<string> #include<vector> using namespace std;int main() {int total;cin >> total;vector<char> stackStr;string str;int j;for (j = 0; j < total; j++){cin >> str;int i;stackStr.clear();for (i = 0; i < str.length(); i++){if (str[i] == 'G'){cout << stackStr.size() << endl;}else{if (stackStr.size() == 0)//棧為空{stackStr.push_back(str[i]);//入棧}else if (*(stackStr.end() - 1) == '['&&str[i] == ']')//匹配{stackStr.erase(stackStr.end() - 1);//出棧}else{stackStr.push_back(str[i]);//入棧}}}}system("pause"); }

方法2:stack

#include<iostream> #include<string> #include<stack> using namespace std;int main() {int total;cin >> total;stack<char> stackStr;string str;int j;for (j = 0; j < total; j++){cin >> str;int i;while (!stackStr.empty()){stackStr.pop();}for (i = 0; i < str.length(); i++){if (str[i] == 'G'){cout << stackStr.size() << endl;break;}else{if (stackStr.size() == 0)//棧為空{stackStr.push(str[i]);//入棧}else if (stackStr.top() == '['&&str[i] == ']')//匹配{stackStr.pop();//出棧}else{stackStr.push(str[i]);//入棧}}}}cout << endl;system("pause"); } //[][][[][[]][]][[]][][[[[[[[]]]][][]][[][[]][[[[G[]][]][]]][]]]][[][]][][[][]][][] //答案:7

總結

以上是生活随笔為你收集整理的ACM练习 愚人节拆括号【vector的清空 栈的使用】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。