BZOJ1925 Sdoi2010 地精部落

2022-05-05 01:30:10 字數 1213 閱讀 3788

time limit: 10 sec  memory limit: 64 mb

submit: 1442  solved: 902

[submit][status][discuss]

傳說很久以前,大地上居住著一種神秘的生物:地精。

地精喜歡住在連綿不絕的山脈中。具體地說,一座長度為 n 的山脈 h可分

為從左到右的 n 段,每段有乙個獨一無二的高度 hi,其中hi是1到n 之間的正

整數。

如果一段山脈比所有與它相鄰的山脈都高,則這段山脈是乙個山峰。位於邊

緣的山脈只有一段相鄰的山脈,其他都有兩段(即左邊和右邊)。

類似地,如果一段山脈比所有它相鄰的山脈都低,則這段山脈是乙個山谷。

地精們有乙個共同的愛好——飲酒,酒館可以設立在山谷之中。地精的酒館

不論白天黑夜總是人聲鼎沸,地精美酒的香味可以飄到方圓數里的地方。

地精還是一種非常警覺的生物,他們在每座山峰上都可以設立瞭望台,並輪

流擔當瞭望工作,以確保在第一時間得知外敵的入侵。

地精們希望這n 段山脈每段都可以修建瞭望台或酒館的其中之一,只有滿足

這個條件的整座山脈才可能有地精居住。

現在你希望知道,長度為n 的可能有地精居住的山脈有多少種。兩座山脈a

和b不同當且僅當存在乙個 i,使得 ai≠bi。由於這個數目可能很大,你只對它

除以p的餘數感興趣。

僅含一行,兩個正整數 n, p。

僅含一行,乙個非負整數,表示你所求的答案對p取餘

之後的結果。

4 73

對於 20%的資料,滿足 n≤10;

對於 40%的資料,滿足 n≤18;

對於 70%的資料,滿足 n≤550;

對於 100%的資料,滿足 3≤n≤4200,p≤109

思路

#include#define rg register

#define il inline

#define n 4210

#define ll long long

using namespace std;

ll dp[2][n],n,mod,sum[n];

int main()ll ans(0);for(int i=1;i<=n;++i)ans+=dp[now][i],ans%=mod;

ans<<=1;cout<

return 0;

}

bzoj1925 Sdoi2010 地精部落

題目大意 求全排列中鋸齒狀排列的個數。首先進行打表暴力,會發現第乙個元素作為山峰和第乙個元素作為山谷,這兩種方案數是相等的,因此我們只需求出第乙個元素是山谷的方案數再乘2就是答案。做法一 f i 表示i的全排列,第乙個元素時山谷時,鋸齒狀排列的方案數。那麼考慮在i 1的乙個鋸齒狀排列中插入i這個數,...

bzoj1925 Sdoi2010 地精部落

傳送門 我們設f i j 表示前i個數,第i個數排名是j的方案總數。我們可以強制第1個數是山峰。然後我們可以將整個序列高度取反,得到其他的方案數。然後我們發現這樣做的時間複雜度是o n 3 的 加上字首和優化就是o n 2 了 var f array 0.1,0.5005 of longint n,...

bzoj1925 Sdoi2010 地精部落

傳說很久以前,大地上居住著一種神秘的生物 地精。地精喜歡住在連綿不絕的山脈中。具體地說,一座長度為n的山脈h可分為從左到右的n段,每段有乙個獨一無二的高度hi,其中hi是1到n之間的正整數。如果一段山脈比所有與它相鄰的山脈都高,則這段山脈是乙個山峰。位於邊緣的山脈只有一段相鄰的山脈,其他都有兩段 即...