hihoCoder Challenge 9 register

Ended

Participants:154

Verdict:Accepted
Submitted:2015-03-01 19:22:34

Lang:G++

Edit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cstdio>
using namespace std;
int t,dp[101][101][101],ans[101][101],pd[101],mo=1e9+7;
void solve(int n){
    for (int i=0;i<=n;i++)
        for (int j=0;j<=n;j++)
            for (int k=0;k<=n;k++) dp[i][j][k]=0;
    pd[n]=1; dp[0][n][0]=1;
    for (int i=0;i<n;i++)
        for (int j=0;j<=n;j++)
            for (int k=0;k<=n;k++)
                if (dp[i][j][k]){
                    if (j) dp[i+1][j-1][k]=(dp[i+1][j-1][k]+1ll*j*dp[i][j][k])%mo;
                    if (j&&k) dp[i+1][j-1][k]=(dp[i+1][j-1][k]+1ll*dp[i][j][k]*j*k)%mo;
                    if (j>=2) dp[i+1][j-2][k+2]=(dp[i+1][j-2][k+2]+1ll*dp[i][j][k]*(j-1)*j/2)%mo;
                    if (k>=2) dp[i+1][j][k-2]=(dp[i+1][j][k-2]+1ll*dp[i][j][k]*(k-1)*k/2)%mo;
                    if (j) dp[i+1][j-1][k+1]=(dp[i+1][j-1][k+1]+1ll*j*dp[i][j][k])%mo;
                    if (k) dp[i+1][j][k-1]=(dp[i+1][j][k-1]+1ll*k*dp[i][j][k])%mo;
                    dp[i+1][j][k]=(dp[i+1][j][k]+dp[i][j][k])%mo;
                }
    for (int i=1;i<=n;i++)
        for (int j=0;j<=n;j++)
            for (int k=0;k<=n;k++) ans[n][i]=(ans[n][i]+dp[i][j][k])%mo;
}
int main(){
    scanf("%d",&t);
    for (;t;t--){
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX