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

Posted blogst

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了罗固P5824十二种计算方法(小球计算)相关的知识,希望对你有一定的参考价值。

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十二种计算方法(小球计算)的主要内容,如果未能解决你的问题,请参考以下文章

第十二章 圆周率的计算问题分析

深入理解计算机系统 第十二章 并发编程

十二周练习

北理工计算机复试上机 2007

十二周上机练习

2019年GPLT L2-4 彩虹瓶 比赛题解 中国高校计算机大赛-团体程序设计天梯赛题解