求\(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...