2 条题解

  • 0
    @ 2025-10-8 16:50:36

    G45 第一类斯特林数 斯特林轮换数
    G45 第一类斯特林数 斯特林轮换数(内网)

    #include <bits/stdc++.h>
    using namespace std;
    const int N = 50010, M = 210, P = 1e9 + 7;
    long long S[N][M], C[M][M];
    void init() {
        S[0][0] = 1;
        for (int i = 1; i < N; i++)
            for (int j = 1; j < M; j++)
                S[i][j] = (S[i-1][j-1] + (i-1) * S[i-1][j]) % P;
        for (int i = 0; i < M; i++) C[i][0] = 1;
        for (int i = 1; i < M; i++)
            for (int j = 1; j <= i; j++)
                C[i][j] = (C[i-1][j-1] + C[i-1][j]) % P;
    }
    int main() {
        init();
        int T, n, a, b, ans;
        scanf("%d", &T);
        while (T--) {
            scanf("%d%d%d", &n, &a, &b);
            ans = S[n-1][a + b - 2] * C[a + b - 2][a - 1] % P;
            printf("%d\n", ans);
        }
        return 0;
    }
    
    • 0
      @ 2025-10-8 16:50:21

      G45 第一类斯特林数 斯特林轮换数

      G45 第一类斯特林数 斯特林轮换数(内网)

      #include<bits/stdc++.h>
      using namespace std;
      const int N=50010, M=210, P=1e9+7;
      long long S[N][M], C[M][M];
      void init() 
      {
      	S[0][0]=1;
      	for(int i=1; i<N; i++)
      		for(int j=1; j<M; j++)
      			S[i][j]=(S[i-1][j-1]+(i-1)*S[i-1][j])%P;
      	for(int i=0; i<M; i++) C[i][0]=1;
      	for(int i=1; i<M; i++)
      		for(int j=1; j<=i; j++)
      			C[i][j]=(C[i-1][j-1]+C[i-1][j])%P;
      }
      int main()
      {
      	init();
      	int T, n, a, b, ans;
      	scanf("%d", &T);
      	while(T--)
      	{
      		scanf("%d%d%d", &n, &a, &b);
      		ans=S[n-1][a+b-2]*C[a+b-2][a-1]%P;
      		printf("%d\n", ans);
      	}
      	return 0;
      }
      • 1

      信息

      ID
      447
      时间
      1000ms
      内存
      256MiB
      难度
      7
      标签
      递交数
      84
      已通过
      21
      上传者