長度不超過\(n\),且包含子串行「\(us\)」的、只由小寫字母構成的字串有多少個? 答案對\(10^9+7\)取模。
所謂子串行,指乙個字串刪除部分字元(也可以不刪)得到的字串。
例如,"unoacscc"包含子串行"us",但"scscucu"則不包含子串行"us"
dp思路,求串dp[i]長度為i時,有us的串的數量
分為兩種情況
1.前i-1個字元有us 那麼第i個字元可以是任意字元 即dp[i-1]*26
2.前i-1個字元中有u但沒有us,且第i個字元為s
前i-1個字元總共有26^(i-1)種可能
前i-1個字元且不含有u總共有25^(i-1)種可能
所以前i-1個字元有u總共有26^(i-1) - 25^(i-1)種可能
有u又沒有us則有26^(i-1) - 25^(i-1) - dp[i-1]種可能
那麼把1和2加起來就是26^(i-1) - 25^(i-1) + 25*dp[i-1]種可能
要注意的一點是取模之後減法可能會減出負數,要+mod來避免出錯
#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;
#define ll long long
#define mod 1000000007
#define maxn 100050
#define register long long
#define pi 3.1415926
ll read()
while (ch >= '0' && ch <= '9')
return w * x;
}ll quickpow(ll x,ll y,ll m)//二分思想
x=x*x;
x=x%m;
y=y>>1;
} ans=ans%m;//防止出現特殊資料:1^0%1=0的情況
return ans;
}ll n,dp[1000005],s;
int main()
cout
}
2021牛客寒假演算法基礎集訓營3
三場牛客下來覺得自己越來越不在狀態,思路不清晰,一下手就是bug,每調完一題刷下榜都被甩開十里地,罰時慘不忍睹 傳送門 簽到 include using namespace std typedef long long ll const ll inf 0x3f3f3f3f const ll mod 1...
2021牛客寒假演算法基礎集訓營1
題目描述 請你構造乙個非空的括號字串,包含正好 k 個不同合法括號對。所謂括號字串,是指由 和 這兩種字元構成的字串。要求構造的字串長度不超過100000。輸入描述 乙個整數 k。乙個整數 kk。0 k 1e9 輸出描述 乙個僅包含左右括號字串,其中有 kk 個合法的括號對。如果有多種構造方法,輸出...
2021牛客寒假演算法基礎集訓營6
思路 k1排k2前面滿足 k1.a k2.ax k2.b k1.b k1.ax k1.b k2.b k2.ak1.b k2.b k1.a k2.a k1.b include define ull unsigned long long define ll long long const int inf...