Submission #1219675

#TimeUsernameProblemLanguageResultExecution timeMemory
1219675boclobanchatTents (JOI18_tents)C++20
100 / 100
204 ms71056 KiB
#include<bits/stdc++.h> using namespace std; const int MAXN=3005; const long long mod=1e9+7; long long fr[MAXN],inv[MAXN],dp[MAXN][MAXN]; long long poww(long long n,long long m) { long long res=n,ans=1; while(m) { if(m&1) ans=ans*res%mod; res=res*res%mod,m/=2; } return ans; } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,m; cin>>n>>m; dp[0][0]=fr[0]=inv[0]=1; for(int i=1;i<=max(n,m);i++) inv[i]=poww(fr[i]=fr[i-1]*i%mod,mod-2); for(int i=1;i<=n;i++) for(int j=0;j<=m;j++) { dp[i][j]=dp[i-1][j]; if(j>0) dp[i][j]=(dp[i][j]+dp[i-1][j-1]*(m-j+1)*4)%mod; if(j>1) dp[i][j]=(dp[i][j]+dp[i-1][j-2]*(m-j+1)%mod*(m-j+2)%mod*500000004)%mod; } long long ans=0; for(int i=n;i>=0;i-=2) for(int j=0;j<=m;j++) if(m-j-(n-i)/2>=0) ans=(ans+dp[i][j]*fr[n]%mod*inv[i]%mod*inv[n-i]%mod*fr[m-j]%mod*inv[(n-i)/2]%mod*inv[m-j-(n-i)/2]%mod*fr[n-i]%mod*poww(500000004,(n-i)/2)%mod)%mod; cout<<(ans-1+mod)%mod; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...