bzoj1485: [HNOI2009]有趣的数列
2017-12-15 12:46
281 查看
题面在这里
做法:
我们可以将一个奇数项的数看成入栈,偶数项的数看成出栈,则每一个合法的出栈入栈序对应一个合法解。
所以就是卡特兰数。fn=Cn2nn+1。
然后由于不保证模数p是质数,所以需要暴力分解质因数。
做法:
我们可以将一个奇数项的数看成入栈,偶数项的数看成出栈,则每一个合法的出栈入栈序对应一个合法解。
所以就是卡特兰数。fn=Cn2nn+1。
然后由于不保证模数p是质数,所以需要暴力分解质因数。
/************************************************************* Problem: bzoj 1485 [HNOI2009]有趣的数列 User: fengyuan Language: C++ Result: Accepted Time: 720 ms Memory: 18476 kb Submit_Time: 2017-12-15 11:23:35 *************************************************************/ #include<bits/stdc++.h> #define rep(i, x, y) for (int i = (x); i <= (y); i ++) #define down(i, x, y) for (int i = (x); i >= (y); i --) #define mid ((l+r)/2) #define lc (o<<1) #define rc (o<<1|1) #define pb push_back #define mp make_pair #define PII pair<int, int> #define F first #define S second #define B begin() #define E end() using namespace std; typedef long long LL; //head const int N = 2000010; int n, MOD, cnt; int p[N/10], a[N/10], vis , id ; inline void makePrime(int limit) { rep(i, 2, limit){ if (!vis[i]) p[++ cnt] = i, vis[i] = i, id[i] = cnt; for (int j = 1; j <= cnt && i*p[j] <= limit; j ++){ vis[i*p[j]] = p[j]; id[i*p[j]] = j; if (i%p[j] == 0) break; } } } inline void cal(int x, int v) { while (x != 1){ a[id[x]] += v; x /= vis[x]; } } inline int ksm(int x, int P) { int ret = 1; while (P){ if (P&1) ret = 1LL*ret*x%MOD; x = 1LL*x*x%MOD; P >>= 1; } return ret; } int main() { scanf("%d%d", &n, &MOD); makePrime(2*n); //C(2n,n)/(n+1) //n+2~2n +1 rep(i, n+2, 2*n) cal(i, 1); //1~n -1 rep(i, 1, n) cal(i, -1); int ans = 1; rep(i, 1, cnt) ans = 1LL*ans*ksm(p[i], a[i])%MOD; printf("%d\n", ans); return 0; }
相关文章推荐
- bzoj 1485 [HNOI2009]有趣的数列
- BZOJ 1485 HNOI 2009 有趣的数列 卡特兰数 线性筛法分解质因数
- BZOJ 1485: [HNOI2009]有趣的数列
- bzoj1485:[HNOI2009]有趣的数列
- bzoj1485: [HNOI2009]有趣的数列 卡特兰数
- BZOJ 1485: [HNOI2009]有趣的数列( catalan数 )
- BZOJ 1485: [HNOI2009]有趣的数列 [Catalan数 质因子分解]
- bzoj 1485: [HNOI2009]有趣的数列
- bzoj 1485 [HNOI2009]有趣的数列 卡特兰数
- BZOJ 1485 [HNOI2009]有趣的数列
- bzoj 1485 [HNOI2009]有趣的数列 卡特兰数
- bzoj 1485 : [HNOI2009]有趣的数列
- BZOJ1485: [HNOI2009]有趣的数列
- bzoj 1485: [HNOI2009]有趣的数列 (卡特兰数)
- BZOJ1485: [HNOI2009]有趣的数列
- BZOJ1485: [HNOI2009]有趣的数列
- [BZOJ]1485: [HNOI2009]有趣的数列 Catalan数
- BZOJ系列1485《[HNOI2009]有趣的数列》题解
- 【BZOJ】【1485】【HNOI2009】有趣的数列
- 【bzoj1485:】【 [HNOI2009]有趣的数列】模任意数的卡特兰数