說實話,這道題還是很難的,我記得我第一次做的時候,題目都沒讀懂。到後來看了一遍解析之後再做,還是心有餘悸。
首先三個條件:
1. 只包
含pat
三個字元
\color1.只包含pat三個字元
1.只包含p
at三個
字元所以遍歷一遍,把包含其他字元的字串直接輸出no
2. 形如
xpat
x的是正
確的答案
,x為空
或者僅由
a組成。
\color2.形如xpatx的是正確的答案,x為空或者僅由a組成。
2.形如xp
atx的
是正確的
答案,x
為空或者
僅由a組
成。這個條件的理解是p和t只出現一次,且p在t的左邊,兩者中間隔了乙個a,而且左右兩個x的長度相同且僅由a組成。
3. 如果
apbt
c是正確
,那麼a
pbat
ca也是
正確的。
其中a,
b,c均
或者是空
字串,
或者僅由
a組成。
\color3.如果apbtc是正確,那麼apbatca也是正確的。其中a,b,c均或者是空字串,或者僅由a組成。
3.如果ap
btc是
正確,那
麼apb
atca
也是正確
的。其中
a,b,
c均或者
是空字元
串,或者
僅由a組
成。這個條件的理解是:apbtc要正確,則只能從條件2得來,所以apbtc必須滿足xpatx,也就是說b要等於a且a==c即apata,而apbatca成立,在中間加上了乙個a,在末位加上p前面a的長度。如果記p前面的長度為x,p和t之間的長度為y,t後面的長度為z(都不包含邊界)。那麼滿足中間增加乙個a的長度時,後面增加x的長度,才能滿足是成立的字串。
如果逆向思考,把乙個字串縮短,即z-x同時y-1後也是成立的字元,直到最後y=1而此時應該滿足x==z
#include
#include
#include
using namespace std;
intmain()
if(nump !=
1|| numt !=1||
(loct - locp <=1)
|| others !=0)
int x = locp, y = loct - locp -
1, z = str.
size()
- loct -1;
if(x != z - x*
(y -1)
)else cout<<
"yes"
<}return0;
}
1003 我要通過! 20分
github 不全,更新中 分析 1.首先保證p前,t後,p和t之間全都是a 2.根據題目的第二條和第三條 假如x aa 則aapataa正確 aapa ataa aa正確 aapaaa taaaaaa 正確 2個 1個 2個 2個 2個 2 2個 2個 3個 2 3個 設len1 p前a,len2...
1003 我要通過! 20分
written by 東籬下 悠然 只能有p a t 三種字元,出現別的字元即pass 只能有乙個p和乙個t 根據給出的幾個正確的樣例,分別可以得出 p和t之間可以任意加a,開頭的a的個數 中間的a的個數 結尾的a的個數,並且p和t之間不能為空串 學習 include using namespace...
1003 我要通過! 20 分
題意 題目給出乙個字串,可能有p a t或其他字元。現在需要根據以下幾個條件來判斷該字串能否輸出 yes 條件1 如果出現p a t以外的字元,輸出 no 初始狀態下p和t必須各恰好有乙個,且p在t左邊,p和t之間至少有乙個a,否則輸出 no 條件2 pat apata aapataa aaapat...