乙個只包含』a』、』b』和』c』的字串,如果存在某一段長度為3的連續子串中恰好』a』、』b』和』c』各有乙個,那麼這個字串就是純淨的,否則這個字串就是暗黑的。例如:baacaaccbaaa 連續子串」cba」中包含了』a』,』b』,』c』各乙個,所以是純淨的字串
aabbccaabb 不存在乙個長度為3的連續子串包含』a』,』b』,』c』,所以是暗黑的字串
你的任務就是計算出長度為n的字串(只包含』a』、』b』和』c』),有多少個是暗黑的字串。
輸入描述:
輸入乙個整數n,表示字串長度(1 ≤ n ≤ 30)
輸出描述:
輸出乙個整數表示有多少個暗黑字串
輸入例子:2 3
輸出例子:
9 21
遞迴**如下:
#include
#include
#include
#include
#include
using
namespace
std;
#define debug 0
long
long func(vector
str,int n)
long
long result(0);
if (str.size()==0)
, n);
result += func(vector
, n);
result += func(vector
, n);
}else
if ((*iter_left) + (*iter_right) + 'b' != sum)
if ((*iter_left) + (*iter_right) + 'e' != sum)
}return result;
}int main()
else
vector
str;
cout
<<3*func(str,n)0;}
兩種狀態的轉移情況如下:s(i)狀態新增的字元與最後兩字元相等時,轉化為s(i+1)狀態,否則轉化為d(i+1)狀態;d(i)狀態新增的字元與其最後字元相等時,轉化為s(i)狀態,與其倒數第二個字元相等時,轉化為d(i+1)狀態。狀態轉移方程如下:
s(n+1)=s(n)+d(n)
d(n+1)=2*s(n)+d(n)
注意:數字過大,需要long long型別防止溢位
#include
#include
#include
#include
#include
using
namespace
std;
#define debug 0
long
long func(int n)
if (n==2)
long
long s = 3, d = 6, s, d;
for (auto k = 3; k <= n;++k)
return s + d;
}int main()
else
cout
0; }
程式設計題 暗黑的字串
乙個只包含 a b 和 c 的字串,如果存在某一段長度為3的連續子串中恰好 a b 和 c 各有乙個,那麼這個字串就是純淨的,否則這個字串就是暗黑的。例如 baacaaccbaaa 連續子串 cba 中包含了 a b c 各乙個,所以是純淨的字串 aabbccaabb 不存在乙個長度為3的連續子串包...
暗黑的字串
題目描述 乙個只包含 a b 和 c 的字串,如果存在某一段長度為3的連續子串中恰好 a b 和 c 各有乙個,那麼這個字串就是純淨的,否則這個字串就是暗黑的。例如 baacaaccbaaa 連續子串 cba 中包含了 a b c 各乙個,所以是純淨的字串 aabbccaabb 不存在乙個長度為3的...
暗黑的字串
乙個只包含 a b 和 c 的字串,如果存在某一段長度為3的連續子串中恰好 a b 和 c 各有乙個,那麼這個字串就是純淨的,否則這個字串就是暗黑的。例如 baacaaccbaaa 連續子串 cba 中包含了 a b c 各乙個,所以是純淨的字串 aabbccaabb 不存在乙個長度為3的連續子串包...