HNOI2009 有趣的數列

2022-03-16 23:58:10 字數 862 閱讀 8829

求\(1\)到\(2n\)的全排列種類數,滿足奇數項和偶數項分別單增,任意\(a_ < a_\)

(以下為亂搞。。)考慮從1開始考慮每個數字怎麼填,可以看(猜)出,由於相鄰偶數項比奇數項大,所以奇數項一定要小一些,所以奇數項填的數字個數一定始終大於等於偶數項,這就是個卡特蘭數啦

問題變成求\(catlan(n)\%p\),由於\(p\)不是質數,需要特殊處理

我會擴充套件盧卡斯!

由於分子一定整除分母,將分子分母的每種質因子都提出來做減法,再用快速冪乘起來就好了

通過線性篩和倒敘遞推可以做到\(o(n)\)求出所有質因子的數量,具體見**

整個**的時間複雜度為\(o(nlogn)\)

#include#define n 2000005

#define min(x,y) ((x)<(y)?(x):(y))

#define max(x,y) ((x)>(y)?(x):(y))

using namespace std;

typedef long long ll;

int n,sum[n];

int p[n],mi[n],cnt;

ll mod;

ll quickpow(ll a,ll b)

return ret;

}void init(int maxn) }}

int main()

} ll ans=1;

for(int i=1,t=(n<<1);i<=t;++i)

if(mi[i]==i) ans=ans*quickpow(i,sum[i])%mod;

cout<<(ans%mod+mod)%mod

}

HNOI 2009 有趣的數列 題解

題目傳送門 題目大意 問有多少個長度為 2n2n 2n的序列滿足以下條件 1 這個序列是 1 11 2n2n 2n的乙個排列 2 這個序列奇數字遞增,偶數字也遞增 3 每個偶數字比在他前面一位的奇數字要大。我們設這個序列為 aaa。發現這樣乙個性質 每個偶數字 2i2i 2i滿足a2i a2 i 2...

HNOI2009 有趣的數列 卡特蘭數與楊表

我們稱乙個長度為2n的數列是有趣的,當且僅當該數列滿足以下三個條件 1 它是從1到2n共2n個整數的乙個排列 2 所有的奇數項滿足a1 3 2n 1,所有的偶數項滿足a2 4 2n 3 任意相鄰的兩項a2i 1與a2i 1 i n 滿足奇數項小於偶數項,即 a2i 1 2i。現在的任務是 對於給定的...

1485 HNOI2009 有趣的數列

題目鏈結 題目大意 稱乙個長度為2n 的數列是有趣的,當且僅當該數列滿足以下三個條件 它是乙個1 2n的排列a1 n 1,a2 n a2 i 1i 題解 丟題解跑qaq 我的收穫 2333 include using namespace std define maxn 3000005 int n,p...