寒假集訓 PAT(25分)

2021-09-26 08:56:10 字數 1278 閱讀 9021

7-9 最長對稱子串 (25 分)

對給定的字串,本題要求你輸出最長對稱子串的長度。例如,給定is pat&tap symmetric?,最長對稱子串為s pat&tap s,於是你應該輸出11。

輸入在一行中給出長度不超過1000的非空字串。

在一行中輸出最長對稱子串的長度。

is pat&tap symmetric?

思路:對於乙個字串我們從中間向兩端去擴充套件並判斷是否對稱

分為兩種情況:

1.如果對稱子串是奇數,就以該字元為軸向兩邊擴充套件  找到乙個對稱的就+2最後更新最大值

2.如果對稱子串是偶數,那麼就以兩個字元為軸向兩邊擴充套件,找到對稱+2 並更新最大值

ac**:

#include#includeconst int maxn=1e6+10;

int main()

for(i=1;i=0&&ymax)

max=ans;

}printf("%d\n",max);

return 0;

}

//不得不說這兩個for真的太好了  乙個判斷奇數,另乙個判斷偶數。裡面再套乙個while,用來判斷前後兩個字元是否對稱相等

第二年的ac**(還有一種方法是馬拉車,有空再補吧):

#includeusing namespace std;

string str;

int odd(int s)

return 0;

}

7-10 古風排版 (25 分)

中國的古人寫文字,是從右向左豎向排版的。本題就請你編寫程式,把一段文字按古風排版。

輸入在第一行給出乙個正整數n(<100),是每一列的字元數。第二行給出乙個長度不超過1000的非空字串,以回車結束。

按古風格式排版給定的字串,每列n個字元(除了最後一列可能不足n個)。

this is a test case

asa t

st ih

e tsi

ce s

這題真的是水題,但是總是不能拿到全分...記得要用getchar()接受回車符

ac**

#include #include #include using namespace std;

string s;

char b[1002][1002];

int main()

}for(int i=0;icout<}

return 0;

}

1040 有幾個PAT 25 分

現給定字串,問一共可以形成多少個pat?輸入只有一行,包含乙個字串,長度不超過10 5 只包含p a t三種字母。在一行中輸出給定字串中包含多少個pat。由於結果可能比較大,只輸出對 1000000007 取餘數的結果。2 includeusing namespace std int countp ...

1040 有幾個PAT 25 分

現給定字串,問一共可以形成多少個pat?輸入格式 輸入只有一行,包含乙個字串,長度不超過10 5 只包含p a t三種字母。輸出格式 在一行中輸出給定字串中包含多少個pat。由於結果可能比較大,只輸出對 1000000007 取餘數的結果。輸入樣例 輸出樣例 2一開始的思路是以p為結點找每個p後面有...

1040 有幾個PAT 25分

思路分析一 此題如果直接暴力會超時,所以應該找到規律。通過觀察輸出結果其實就是對於乙個確定位置的a來說,其左邊p的個數乘以其右邊的t的個數。那麼接下來的工作就是統計確定位置a左邊的p的個數。可以設定乙個資料leftnump,記錄p的個數。如果當前位i是p,那麼leftnump i 否則,leftum...