「七天實踐」第六天

2021-10-07 13:36:52 字數 762 閱讀 6830

有一天jerry給tom出了一道題來考驗他。

jerry給了tom乙個長度為2*n的只包含小寫字母的字串,讓tom將這個字串任意挑選字元,將其分成兩個等長的字串a和b(對於乙個si不能同時被選到a和b中),然後a要和reverse(b)相同(a和反轉後的b相同),問這樣的方案數有多少?tom有些為難,所以請你來幫幫他吧。

輸入乙個正整數n,和乙個長度為2*n的字串。

輸出方案數。

示例1輸入:

2「abba」

輸出:4

本題的關鍵在於理解題意:所謂挑選n個字元變成a和b兩個字串,是指在原字串中抽出n個字元,這些字元的的順序保持不變,剩下字元的順序也保持不變,由此組成a和b兩個字串。

例如 「abcdef」,挑選第2、3、5個字元,則分成 「bce」 和 「adf」 兩個串。

比方說:xcccddcccxdd。

從左往右列舉a字串的構成,如果令第乙個x屬於a,根據對稱性,倒數第三個字元x一定是屬於b;如此推導出末尾的dd一定屬於a,中間位置的dd一定屬於b,而且是b的頭兩個字元;然後左邊ccc一定a,右邊ccc一定是b,由此得出1種方案。令第乙個x屬於b也可以用同樣的方式得到1種方案。

用這個思路直接寫**不太好寫,可以通過列舉二進位制,固定左半邊的選擇情況,然後對於每乙個case,通過dfs搜尋右半邊有多少種合法組合,搜尋過程中利用對稱性進行剪枝。

對於字元全部相同case如」aaaaaaaa」,因為過程中無法剪枝,會退化成2^(2*n)。對於這種case,答案就是 c(2n,n) ,預判一下直接返回即可。

Python七天入門 第六天

以正確數量和順序宣告的引數 def f a,b print a,b f 1,2 1,2按順序傳遞到a和b中 函式呼叫時以關鍵字傳遞,可以更改順序.def f a,b print a,b f b 2,a 1 形參中設定預設值的引數,需要放在普通引數後面.def f a,b,c 3 print a,b,...

待飛日記(第六天和第七天)

又一架飛機失聯了,默默的為他們祈禱 趕緊回來吧,你們的家人在等待你們回來。轉眼一周的時間的過去,時間好快啊!現在感慨生活的快節奏,好多的東西都需要做,但是都沒有做。唉!人生苦短啊!不感慨了,在家裡待了一周了,時間不算久,但是感覺和原先上班的感覺很不一樣。人難道都這麼的賤嗎?讓休息還要想上班。呵呵!這...

第六天 風氣

第六天 風氣 答 人有了,就得定規矩,否則就是一幫烏合之眾,而不是團隊。1必須朝九晚五。嚴格控制員工手裡有辦公室鑰匙。下班必須準時鎖門,員工準時離開。斷公司外網。要加班必須上級主管簽字,更不准在辦公室留宿,洗澡。這一條很重要,不要讓程式設計師活得像個浪子,精神恍惚,口中神叨,鬍子拉碴,這都是浮動工作...