C 1003 我要通過!(排除法)

2021-10-08 11:52:58 字數 1407 閱讀 9646

「答案正確」的條件是:

字串中必須僅有 p、 a、 t這三種字元,不可以包含其它字元;

任意形如 xpatx 的字串都可以獲得「答案正確」,其中 x 或者是空字串,或者是僅由字母 a 組成的字串;

如果 apbtc 是正確的,那麼 apbatca 也是正確的,其中 a、 b、 c 均或者是空字串,或者是僅由字母 a 組成的字串。

現在就請你為 pat 寫乙個自動裁判程式,判定哪些字串是可以獲得「答案正確」的。

輸入格式:

每個測試輸入包含 1 個測試用例。第 1 行給出乙個正整數 n (<10),是需要檢測的字串個數。接下來每個字串佔一行,字串長度不超過 100,且不包含空格。

輸出格式:

每個字串的檢測結果佔一行,如果該字串可以獲得「答案正確」,則輸出 yes,否則輸出 no。

輸入樣例:

8pat

paat

aapataa

aapaataaaa

xpatx

ptwhatever

apaaataa

輸出樣例:

yesyes

yesyes

nono

nono

#include

using

namespace std;

bool

judge

(string s)

//排除t在p的前面的情況

int p1 = s.

find

('p');

int p2 = s.

find

('t');

if(p2 < p1)

return

false

;//排除p和t之間沒有a的情況

int p3 = p1 +1;

if(s[p3]

!='a'

)return

false

;//若p和t之間只有乙個a,排除p之前的a的個數與t之後的a的個數不相等的情況

int a_num = p2 - p1 -2;

if(s[0]

=='a'

&&(p2 - p1 -1)

==1)//若第乙個字母為a,且p和t之間不只有乙個a,排除不滿足題目中數量關係的情況

if(s[0]

=='a'

&&(p2 - p1 -1)

!=1)//修成正果

return

true;}

intmain()

for(

int i =

0; i < n; i++

)else

}return0;

}

雖然排除法很不是滋味,但是很有必要練習,因為座標之間的相減表示的含義往往不是一下子能夠理解,?

1003 我要通過

一直都搞錯了題目的意思,後來看了網上的解析,才知道原來題目是要apbtc滿足len a len b len c int main size t t s.find first not of a p 1 if t string npos t p 1 s t t 找出p後下乙個不是a的位置,如果不是t或者...

1003 我要通過

解題思路 剛開始讀題的時候有幾個地方沒有注意,首先xpatx其中pat兩側的應該是一樣的串,其次如果apatc正確,那麼apaatca也是正確的,以此類推apaaatcaa,apaaaatcaaa 都是正確的 include include include using namespace std i...

1003 我要通過!

只看 直接拖到最下面 其實剛一看這個題沒看懂,很輕易就能得出的結論是 必須要有pat三個字元,p,t有且只有乙個,p在t前面。第2,3點就不知道具體想表達啥了,反正我是沒看出來。看了一下網上的部落格,大家普遍認同的一種結論是 以p和t為邊界可以分為三部分 p t 也就是畫星號的三部分。我們先不管空字...