hiho week 198 register

Ended

Participants:172

Verdict:Accepted
Score:100 / 100
Submitted:2018-04-19 18:03:17

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<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod=1e9+7;
char s[105],*sum;
int dis[105][2],num,i,len;
ll f[105][505],dp[55][55][505];
void init()
{
    dp[0][0][0]=1;
    for(int i=0;i<55;i++)
        for(int j=0;j<55;j++)
            for(int k=0;k<505;k++)
            {
                if(i)
                    for(int ii=0;ii<10&&k>=ii;ii++)
                        dp[i][j][k]+=dp[i-1][j][k-ii];
                if(j)
                    for(int ii=1;ii<10&&k>=ii;ii++)
                        dp[i][j][k]+=dp[i][j-1][k-ii];
                if(i&&j)
                    for(int ii=1;ii<19&&k>=ii;ii++)
                        dp[i][j][k]-=dp[i-1][j-1][k-ii]*min(ii,19-ii);
                dp[i][j][k]=(dp[i][j][k]%mod+mod)%mod;
            }
}
ll dfs(int now,int last)
{
    if(now==len)
        return last==0&&(!(dis[now][0]||dis[now][1]));
    if(f[now][last]!=-1)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX