BZOJ1485 有趣的數列 卡特蘭數

2022-03-16 15:43:01 字數 984 閱讀 5422

首先要明確這是卡特蘭數,證明如下:

我們可以把奇數項和偶數項看成2個數列,然後從1到2*n掃一邊可以往2個數列裡塞,但必須滿足奇數項的個數時刻大於等於偶數項個數(小的話就不能讓奇數項小於偶數項了),於是便巧妙地出棧順序問題嗎即卡特蘭數。

看到p不一定是素數,便想到了exlucas,打完交上去tle80,這時才看見資料範圍是:

n<=1e6,p<=1e9!f**k!

這麼大的模數exface啊?(exskyh)

在無奈之中頹了deepinc的題解發現質因數分解可以線篩+遞迴處理,學到了學到了。。。

#include#include

#include

#include

#include

#include

#include

#include

#define int long long

using

namespace

std;

const

int n=2e6+10

;int ans=1

,cnt,n,p,a[n],prime[n],mark[n],f[n];

void init(int x,int

y)int poww(int x,int y,int

z)

return

sum;

}main()

for(int j=1;j<=cnt;j++)

}for(int i=n+2;i<=n*2;i++) init(i,1

);

for(int i=2;i<=n;i++) init(i,-1

);

for(int i=2;i<=n*2;i++) ans=ans*poww(i,a[i],p)%p;

printf(

"%lld

",ans);

return0;

}

BZOJ 1485 有趣的數列

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

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...

有趣的數列 卡特蘭數

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