第八屆藍橋杯省賽C A組 正則問題(DFS)

2021-10-02 13:16:28 字數 1069 閱讀 1288

描述:正則問題

考慮一種簡單的正規表示式:

只由 x ( ) | 組成的正規表示式。

小明想求出這個正規表示式能接受的最長字串的長度。 

例如 ((xx|***)x|(x|xx))xx 能接受的最長字串是: ******,長度是6。

輸入----

乙個由x()|組成的正規表示式。輸入長度不超過100,保證合法。 

輸出----

這個正規表示式能接受的最長字串的長度。 

例如,輸入:

((xx|***)x|(x|xx))xx 

程式應該輸出:

6 資源約定:

峰值記憶體消耗(含虛擬機器) < 256m

cpu消耗  < 1000ms

請嚴格按要求輸出,不要畫蛇添足地列印類似:「請您輸入...」 的多餘內容。

注意:main函式需要返回0;

只使用ansi c/ansi c++ 標準;

不要呼叫依賴於編譯環境或作業系統的特殊函式。

所有依賴的函式必須明確地在原始檔中 #include

不能通過工程設定而省略常用標頭檔案。

提交程式時,注意選擇所期望的語言型別和編譯器型別。

這裡的話我們就是取|兩端較長的字串,x是組成字串的字元,如果(xx)x的話就字串長度就是3。在遇到乙個括號時,我們會先終止當前的計算,進入到括號裡進行計算,當這一次計算結束後,我們返回這個結果繼續計算。這是乙個和深搜回溯很相似的過程。

詳情見**解釋~

#include#include#includeusing namespace std;

string str;

int pos, len, ans;

int dfs()

else if (str[pos] == ')')

else if (str[pos] == '|')

else

}res = max(num, res);//在比較|右邊的數量和左邊的數量,此刻num是右邊的數量,res是左邊的數量

return res;

}int main()

第八屆藍橋杯省賽C A組 迷宮(DFS)

迷宮地圖如下 請你計算一下,最後,有多少玩家會走出迷宮?而不是在裡邊兜圈子。請提交該整數,表示走出迷宮的玩家數目,不要填寫任何多餘的內容。如果你還沒明白遊戲規則,可以參看乙個簡化的4x4迷宮的解說圖 答案 31 思路 其實也是dfs型別的問題。通過對每乙個方個進行列舉,對他進行深度優先遍歷,找尋出路...

藍橋杯第八屆省賽

第4題 6x6的方格,沿著格仔的邊線剪開成兩部分。要求這兩部分的形狀完全相同。如圖 p1.png,p2.png,p3.png 就是可行的分割法。試計算 包括這3種分法在內,一共有多少種不同的分割方法。注意 旋轉對稱的屬於同一種分割法。請提交該整數,不要填寫任何多餘的內容或說明文字。圖的dfs 按照兩...

第八屆藍橋杯省賽C A組 字母組串(遞迴)

include a個a,b個b,c個c 字母,能組成多少個不同的長度為n的串。int f int a,int b,int c,int n int main 對於上面的測試資料,小明口算的結果應該是 619 注意 只填寫劃線部分缺少的 不要提交任何多餘內容或說明性文字。答案 f a 1,b,c,n 1...