码迷,mamicode.com
首页 > 其他好文 > 详细

罗固P5824十二种计算方法(小球计算)

时间:2020-04-13 10:48:40      阅读:96      评论:0      收藏:0      [点我收藏+]

标签:包含   算法   href   大全   方法   iii   计算   memcpy   etl   

priproblem ++ i + 1n + 1有序集合链接:

如果有:(n \\\\)个球,请将它们放在\\\\(m \\\\)框中,然后找到解决方案的数量。

\\\\(\\\\文字{I ..)。球是不同的,盒子是不同的。

显然,答案是\\\\(m ^ n :)。

\\\\(\\\\文字{II ..)。球彼此不同,盒子彼此不同,每个盒子最多容纳一个球。

我们将球一个接一个地放在框中,\\\\(i-i + 1 \\\\)在放置球((i \\\\))时有多种选择,因此答案\\\\(m ^:\\\\下划线::)。

\\\\(\\\\文字{III:\\\\):球彼此不同,盒子也不同,每个盒子至少包含一个球。

这等效于用数字\\\\(n \\\\)除以\\\\(m \\\\)命令集,因此答案是\\\\(\\\\左\\\\ {n \\\\在顶部\\\\ m \\\\右\\\\} m!\\ \\)E.

\\\\(\\\\文字{IV ..)。球是不同的,盒子都一样。

指出球放入多少盒,?然后解数:????(n \\\\)这个数字分为几个未解决的集合,因此答案\\\\(\\\\ money \\\\ limits_ i = 1} ^ m \\\\仍然存在) g) n \\\\向上i \\\\右:: \\\\)。

\\\\(\\\\文字{V ..)。球不同,盒子相同,每个盒子最多可容纳一个球。

显然,答案是\\\\([n \\\\ le m] :)。

\\\\(\\\\文字{VI ..)。球是不同的,盒子是相同的,每个盒子至少包含一个球。

显然,答案是\\\\(\\\\左:{n:上:右:: \\\\)。

\\\\(\\\\文本{VII ..)。球是一样的,盒子是不同的。

每个盒子中的每个球只有一个解决方案。 OGF是\\\\(\\\\ frac1 {1-x} \\\\),所以答案是\\\\([x ^ n] \\\\ frac1 {(1-x)^ m} = :: n + m-1 \\\\选择n \\\\):

\\\\(\\\\文字{VIII::):球是相同的,盒子是不同的,每个盒子最多只能容纳一个球。

显然,答案是\\\\({m:select::)。

\\\\(\\\\文字{IX::):球相同,盒子不同,每个盒子至少包含一个球。

此时,每个框的OGF为\\\\(\\\\ frac x {1-x} \\\\),因此答案为\\\\([x ^ n] \\\\ frac {x ^ m} {(1-x)^ m } = n-1 \\\\选择m -1:\\\\)。

\\\\(\\\\文字{X ..)。球是一样的,盒子都一样。

\\\\(N \\\\)等于除以不受管制的自然数之和,答案为\\\\(p(n + m,m)= [x ^ n] \\\\ prod \\\\ limits_ {i = 1} :: m? frac1 {1-x ^ i} \\\\):

\\\\(\\\\文字{XI::):球是相同的,盒子是相同的,每个盒子最多可容纳一个球。

显然,答案是\\\\([n \\\\ le m] :)。

\\\\(\\\\文本{XII ..)。球是相同的,盒子是相同的,每个盒子至少包含一个球特产哪里有图片价格大全

\\\\(N \\\\)等于将正整数之和除以解,答案为\\\\(p(n,m)= [x ^ {nm}] \\\\ prod \\\\ limit_ {i = 1:^ m \\\\ frac1 {1-x ^ i} \\\\):

include \\ ult26 lt; cstdio \\

include \\ ult26 lt; cstring \\ ugt26

include \\ ult26 lt;数字\\

include \\ ult26 lt;算法\\

const int N = 524289,P = 998244353;

int n,m,deg,len,fac [N],inv [N],ifac [N],rev [N],w [N],S [N],p [N];

int inc(int a,int b){返回a + = b-P,a + = a \\ \\ gt; 31安培; P;

int dec(int a,int b){返回a- = b,a + = a \\ \\ gt; 31安培; P;

int mul(int a,int b)返回1ll * a * b%P;}

int pow(int a,int k)(int r = 1; for(; k; k \\ u0026 gt; \\ u0026 gt; = 1,a = mul(a,a))if(k \\ u0026 amp; 1) r = mul(a,r)返回r;}

int C(int n,int m){返回m \\ lt; 0 || m> n? 0: mul(mul(fac [n],ifac [m]),ifac [n-m]);}

int getlen(int n){返回1 \\ ult26 lt; \\ ltlt; (32 -__ buildin_clz(n));}

无效(int n)

{

int lim = 1 \\ \\ ltlt; (len = 32 -__ buildin_clz(n)),g =战俘(3,(P-1)/ lim);

w [lim> \\ gt; 1] = 1,fac [0] = ifac [0] = inv [0] = fac [1] = ifac [1] = inv [1] = 1;

for(int i = 1; i \\ lim; ++ i)rev [i] =(rev [i \\ u0026 gt; \\ u0026 gt; 1] \\ u0026 gt; \\ u0026 gt; 1)| (i = 1?lim = 1:0);

for(int i =(lim = 1)+1; i \\ lim; ++ i)w [i] = mul(w [i-1],g);

for(int i =(lim = 1)-1; i; -i)w [i] = w [i \\ u0026 lt; \\ ltlt; 1];

对于(int i = 2; i \\ lim; ++ i)fac [i] = mul(fac [i-1],i),ifac [i] = mul(ifac [i-1], inv [i] =母猪(inv [P%i],PP / i);

}

无效的NTT(int * a,int lim,int f)

{

如果(!?f)std ::倒车(a + 1,a + lim);

对于(int i = 0,x = len -__- buildin_ctz(lim); i \\ u0026 lt; lim; ++ i)if(i \\ u0026 lt; rev [i] \\ u0026 gt; \\ u0026 gt; x)std :: swap(a [i],[rev [i] \\\\ x]);

对于(int i = 1; i \\ lim; i; \\ u0026 lt; \\ u0026 lt; = 1)for(int j = 0,d = i \\ u0026 lt; \\ u0026 lt; 1; j \\ u0026 lt ; lim; j + = d)对于(int k = 0,x; k \\ u0026 lt; i; ++ k)x = mul(a [i + j + k],w [i + k]),a [i + j + k] = dec(a [j + k],x),a [j + k] = inc(a [j + k],x);

如果(!?f)为(int i = 0,x = P-(P-1)/ lim; i \\ lim; ++ i)a [i] = mul(a [i],x) ;

}

无效Inv(int * a,int * b,int deg)

{

如果(deg == 1)返回b [0] = pow(a [0],P-2),则无效();

静态整数t [N]; int lim =盖伦(度* 2-2);

Inv(a,b,(deg + 1)\\\\ u0026 gt; 1),memcpy(t,a,deg deg ult26 \\ lt; 2),memset(t + deg,0,(lim -deg)\\ u0026 lt; 2);

NTT(t,lim,1),NTT(b,lim,1);

for(int i = 0; i \\ lim; ++ i)b [i] = mul(dec(2,mul(b [i],t [i])),b [i]);

NTT(b,lim,-1),memset(b + deg,0,(lim-deg)\\ u0026 lt; 2);

}

void Der(int * a,int * b,int deg){for(int i = 1; i \\ deg; ++ i)b [i-1] = mul(a [i],i); b [deg -1] = 0;}

void Int(int * a,int * b,int deg){for((int i = 1; i \\ deg; deg; ++ i)b [i] = mul(a [i-1],inv [i ]); b [0] = 0;}

无效的Ln(int * a,int * b,int deg)

{

静态整数t [N]; int lim =盖伦(度* 2-2);

Inv(a,t,deg),Der(a,b,deg),NTT(t,lim,1),NTT(b,lim,1);

for(int i = 0; i \\ lim; ++ i)t [i] = mul(t [i],b [i]);

NTT(t,lim,-1),Int(t,b,deg),memset(t,0,lim \\ 2),memset(b + deg,0,(lim-deg) \\ u0026 lt; \\ u0026 lt; 2));

}

无效的Exp(int * a,int * b,int deg)

{

如果(deg == 1)返回b [0] = 1,则无效();

静态整数t [N]; int lim =盖伦(度* 2-2);

Exp(a,b,(deg + 1)\\\\ 1),Ln(b,t,deg);

对于(int i = 0; i \\ deg; ++ i)t [i] = dec(a [i],t [i]);

memset(t + deg,0,(lim-deg)\\ lt; \\ u0026 lt; 2),++ t [0],NTT(t,lim,1),NTT(b,lim,1);

for(int i = 0; i \\ lim; ++ i)b [i] = mul(b [i],t [i]);

NTT(b,lim,-1),memset(b + deg,0,(lim-deg)\\ u0026 lt; \\ u0026 lt; 2),memset(t + deg,0,(lim-deg)\\ u0026 lt ; \\ u0026 lt; 2);

}

无效的计算()

{

静态整数F [N],G [N],lim = 1 \\ \\ ltlt; len,deg = std :: min(n,m)+1;

对于(int i = 0; i \\ deg; ++ i)F [i] = mul(pow(i,n),ifac [i]),G [i] = i \\ uamp26; 1? P-ifac [i]: ifac [i];

NTT(F,lim,1),NTT(G,lim,1);

for(int i = 0; i \\ lim; ++ i)S [i] = mul(F [i],G [i]);

NTT(S,lim,-1),memset(S +度,0,(lim-deg)* 4);

}

无效的计算()

{

static int F [N];

对于(int i = 1; i \\ u0026 lt; = m; ++ i)for(int j = i; j \\ u0026 lt; = n; j + = i)F [j] = inc(F [j] ,inv [j / i]);

Exp(F,p,n + 1);

}

int main()

{

斯堪夫(\\ u0026“;%d%d \\\\ n”,\\ n,\\ u0026 amp; m);

主动(2 * std :: max(n,m)),calcS(),Calculation();

printf(\\ u0026“; d d \\ u0026 n”,pow(m,n));

printf(\\ u0026“;%d \\\\ n \\ u0026”; mul(C(m,n),fac [n]));

printf(\\ u0026“;%d \\\\ n \\ u0026”; mul(S [m],fac [m])));

printf(\\ u0026“; d d \\\\ n \\ u0026”; std ::累加(S + 1,S + m + 1,0,inc));

printf(\\ u0026“;%d \\\\ n”,n \\ ult; = m);

printf(\\ u0026“;%d \\\\ n \\ u0026”; S [m]);

printf(\\ u0026“;%d \\\\ n \\ u0026”; C(m + n-1,n));

printf(\\ u0026“;%d \\\\ n \\ u0026”; C(m,n));

printf(\\ u0026“;%d \\\\ n \\ u0026”; C(n-1,m-1));

printf(\\ u0026“;%d \\\\ n \\ u0026”; p [n]);

printf(\\ u0026“;%d \\\\ n”,n \\ ult; = m);

printf(\\ u0026“;%d \\\\ n”; n \\ u0026 lt; m?0:p [n-m]);

}

罗固P5824十二重计算法(小球计算)问题++ i + 1n + 1自定义集合。JS

罗固P5824十二种计算方法(小球计算)

标签:包含   算法   href   大全   方法   iii   计算   memcpy   etl   

原文地址:https://www.cnblogs.com/blogst/p/12689689.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!