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的清空 栈的使用】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ACM练习 小Z来讲排名规则(WA)【C
- 下一篇: C++ STL栈Stack的使用