这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 | |||
2020-2021:teams:namespace:牛客多校第七场 [2020/08/08 11:20] great_designer [J] |
2020-2021:teams:namespace:牛客多校第七场 [2020/08/08 11:26] (当前版本) great_designer |
||
---|---|---|---|
行 233: | 行 233: | ||
</hidden> | </hidden> | ||
+ | =====I===== | ||
+ | |||
+ | <hidden> | ||
+ | <code C> | ||
+ | |||
+ | #include<stdio.h> | ||
+ | |||
+ | int T; | ||
+ | long long mod; | ||
+ | long long norings[5007], GraphCnt[5007], EdgeCnt[5007], f[5007], g[5007]; | ||
+ | long long SS[5007][5007]; | ||
+ | | ||
+ | int power(int x, int times) | ||
+ | { | ||
+ | return SS[x][times]; | ||
+ | } | ||
+ | |||
+ | long long C[5007][5007]; | ||
+ | |||
+ | int main() | ||
+ | { | ||
+ | scanf("%d%d", &T, &mod); | ||
+ | int i; | ||
+ | for(i = 1; i < 5007; i++) | ||
+ | { | ||
+ | SS[i][0] = 1; | ||
+ | int j; | ||
+ | for(j = 1; j < 5007; j++) | ||
+ | SS[i][j] = (long long)SS[i][j - 1] * i % mod; | ||
+ | } | ||
+ | for(i = 0; i < 5007; i++) | ||
+ | { | ||
+ | C[i][0] = C[i][i] = 1; | ||
+ | int j; | ||
+ | for(j = 1; j < i; j++) | ||
+ | { | ||
+ | C[i][j] = C[i - 1][j - 1] + C[i - 1][j] ; | ||
+ | if (C[i][j] >= mod) C[i][j]-=mod; | ||
+ | } | ||
+ | } | ||
+ | norings[1] = norings[2] = 1; | ||
+ | for(i = 3; i < 5007; i++) | ||
+ | { | ||
+ | norings[i] = power(i, i - 2); | ||
+ | } | ||
+ | for(i = 1; i < 5007; i++) | ||
+ | { | ||
+ | GraphCnt[i] = norings[i]; | ||
+ | } | ||
+ | for(i = 2; i < 5007; i++) | ||
+ | { | ||
+ | EdgeCnt[i] = 0; | ||
+ | int j; | ||
+ | for(j = 1; j <= i - 1; j++) | ||
+ | { | ||
+ | EdgeCnt[i] = (EdgeCnt[i] + C[i - 2][j - 1] * power(i - 1, i - j - 1) % mod * i % mod * (j * j) % mod) % mod; | ||
+ | } | ||
+ | } | ||
+ | f[0] = 1; | ||
+ | for(i = 1; i < 5007; i++) | ||
+ | { | ||
+ | int j; | ||
+ | for(j = 1; j <= i; j++) | ||
+ | { | ||
+ | f[i] = (f[i] + GraphCnt[j] * f[i - j] % mod * C[i - 1][j - 1]) % mod; | ||
+ | g[i] = (g[i] + C[i - 1][j - 1] * (EdgeCnt[j] * f[i - j] % mod + GraphCnt[j] * g[i - j] % mod)) % mod; | ||
+ | } | ||
+ | } | ||
+ | while (T--) | ||
+ | { | ||
+ | int n; | ||
+ | scanf("%d",&n); | ||
+ | printf("%lld\n",g[n]); | ||
+ | } | ||
+ | return 0; | ||
+ | } | ||
+ | |||
+ | </code> | ||
+ | </hidden> | ||
=====J===== | =====J===== |