河南省藍橋杯第八屆省賽 7 正則問題

2021-10-05 07:16:54 字數 1511 閱讀 7527

題目描述:

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

只由 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的數目,選擇多的那個即可

**如下:

#include#include#include#includeusing namespace std;

string ss;

stacks;

stacks1;

int sum=0;

void calc();

int main()

char temp=s.top();

s1.push(temp);

s.pop();

calc();

} }cout

}void calc()

substring[i]='\0';

int suml=0;

int sumr=0;

int find=substring.find("|");

for(int i=find;substring[i]!='(';i--)

if(substring[i]=='x')

suml++;

for(int i=find;substring[i]!=')';i++)

if(substring[i]=='x')

sumr++;

int sumx=max(suml,sumr);

for(int i=1;i<=sumx;i++)

s.push('x');

cout<<"substring is "

}

河南省藍橋杯第八屆省賽 9 分巧克力

題目描述 兒童節那天有k位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友們。小明一共有n塊巧克力,其中第i塊是hi x wi的方格組成的長方形。為了公平起見,小明需要從這 n 塊巧克力中切出k塊巧克力分給小朋友們。切出的巧克力需要滿足 1.形狀是正方形,邊長是整數 2.大小相同 例如一塊6x5...

河南省藍橋杯第八屆省賽 10 油漆面積

題目描述 x星球的一批考古機械人正在一片廢墟上考古。該區域的地面堅硬如石 平整如鏡。管理人員為方便,建立了標準的直角座標系。每個機械人都各有特長 身懷絕技。它們感興趣的內容也不相同。經過各種測量,每個機械人都會報告乙個或多個矩形區域,作為優先考古的區域。矩形的表示格式為 x1,y1,x2,y2 代表...

藍橋杯第八屆省賽

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