这里会显示出您选择的修订版和当前版本之间的差别。
| 两侧同时换到之前的修订记录 前一修订版 | |||
|
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===== | ||