尋找字串

2021-08-20 06:04:39 字數 1399 閱讀 3675

時間限制: 1 sec  

記憶體限制: 128 mb

對於乙個字串 s,定義乙個函式 s(x),表示 s 中有多少個子串 x。現在給定 s(a),s(b),s(ab),s(ba)的值,求滿足這 4 個值的字串 s,如果有多個滿足條件的字串,輸出字典序最小的。

輸入乙個 t(t ≤ 50)表示 t 組資料。

對於每組資料按順序輸入用空格分開的四個整數,分別表示 s(a),s(b),s(ab),s(ba) (0 ≤ s(a), s(b), s(ab), s(ba) ≤ 10^6 ,s(a) + s(b) >0)的值。

對於每組資料輸出一行,包含乙個字串表示結果,如果無解則輸出-1。

2

2 2 1 1

4 3 7 1

abba

-1

這道題其實只要找到規律基本上都可以做出來。假設輸入的四個數分別為a,b,c,d,我們可以分別討論a>d,c==d,c

當c>d時,我們可以發現以a開頭例如abab字典序是最小的,當有多餘的a,b的時候我們可以往裡面插,如aababb,這種情況一定是以a開頭,以b結束。

當c==d時,我們可以分a>c和a==c兩種情況討論。當a>c時,我們可以看出以a開頭以a結尾可以構成c==d這種情況,例如abababa,當有a,b有剩餘的時候可以往裡面插,例如aaabababba;當a==c時,我們可以看出上種情況其實a的個數是多餘b的,所以以b開頭以a結尾可以構成c==d這種情況,例如bababab,當有b有剩餘的時候可以往裡面插,例如babababbb。

當c0和c==0兩種情況,當c>0時,我們可以知道當以b開頭以a結尾可以滿足cababbba;至於c==0的時候,因為c

#include int main() 

if (a + b <= c + d || c - d > 1 || d - c > 1)

if (a && b && !c && !d)

if (c > d)

else if (c == d)

for (i = 0; i < c; i++)

printf("ba");

for (i = 0;i < b - c; i++)

printf("b");

printf("\n");

}else if(c < d)

printf("ba");

for (i = 0; i < a - d; i++)

printf("a");

for (i = 0; i < d - 2; i++)

printf("ba");

for (i = 0; i < b - c; i++)

printf("b");

printf("a\n");}}

return 0;

}

尋找字串

某天,蒜頭君和花椰妹在公園裡散步,走著走著,我的天 他們各自都撿到了一串漂亮的字串,然而蒜頭君好奇心比較重,他想知道自己的字串在花椰妹的字串 現了多少次,例如花椰妹的字串為abababa,蒜頭君的字串為aba,那麼蒜頭君的字串在花椰妹的字串 現了3次。蒜頭君一向比較傲嬌,於是向你請教,你可以幫幫他麼...

尋找字串

描述 由鍵盤輸入兩個字串 假設第乙個字串必包含第二個字串,如第乙個字串為abcdef,第二個為cde,則cde包含在abcdef中 現要求程式設計輸出第二字串在第一行字串 現的位置。如果第二個字串在第乙個字串 現多次,則以最前出現的為準 輸入樣例 abcdefg de輸出樣例 4 include i...

CodeVS 1204 尋找字串位置

題目描述 description 給出字串a和字串b,保證b是a的乙個子串,請你輸出b在a中第一次出現的位置。輸入描述 input description 僅一行包含兩個字串a和b 輸出描述 output description 僅一行乙個整數 樣例輸入 sample input abcd bc 樣...