Submission #574382

#TimeUsernameProblemLanguageResultExecution timeMemory
574382uroskNoM (RMI21_nom)C++14
100 / 100
394 ms117556 KiB
#define here cerr<<"===========================================\n" #include <bits/stdc++.h> #define ld double #define ll long long #define llinf 100000000000000000LL // 10^17 #define pb push_back #define popb pop_back #define fi first #define sc second #define endl '\n' #define pll pair<ll,ll> #define pld pair<ld,ld> #define sz(a) (ll)(a.size()) #define all(a) a.begin(),a.end() #define ceri(a,l,r) {for(ll i_ = l;i_<=r;i_++) cerr<<a[i_]<< " ";cerr<<endl;} #define daj_mi_malo_vremena ios_base::sync_with_stdio(false);cerr.tie(0);cout.tie(0);cin.tie(0); using namespace std; #define mod 1000000007 #define maxn 4005 ll n,m; ll fact[maxn]; ll add(ll x,ll y){ x+=y; if(x<0){ x%=mod; x+=mod; }else{ if(x>=mod) x%=mod; } return x; } ll mul(ll a,ll b){ ll ans = (a*b)%mod; if(ans<0) ans+=mod; return ans; } ll mul(vector<ll> v){ if(sz(v)==1) return v[0]; if(sz(v)==0) return 1LL; ll ans = 1; for(ll x : v) ans = mul(ans,x); return ans; } ll po(ll x,ll y){ if(y==0) return 1LL; if(y==1) return x; ll ans = po(x,y/2); ans = mul(ans,ans); if(y&1) ans = mul(ans,x); return ans; } ll inv(ll x){return po(x,mod-2);} ll bin[maxn][maxn]; ll ch(ll x,ll y){ if(x<y) return 0; return bin[x][y]; } ll f(ll i){ if((i&1)) return 1; return -1; } ll dp[maxn][maxn]; ll rem[maxn]; int main(){ daj_mi_malo_vremena for(ll i = 1;i<maxn;i++) bin[i][0] = bin[i][i] = 1; for(ll i = 1;i<maxn;i++){ for(ll j = 1;j<i;j++){ bin[i][j] = add(bin[i-1][j],bin[i-1][j-1]); } } fact[0] = 1; for(ll i = 1;i<=maxn-1;i++) fact[i] = mul(fact[i-1],i); cin >> n >> m; for(ll i = 1;i<=2*n;i++) rem[i%m]++; rem[m] = rem[0]; dp[0][0] = 1; for(ll i = 1;i<=m;i++){ ll ni = rem[i]; for(ll j = 0;j<=n;j++){ for(ll k = 0;2*k<=ni&&j>=k;k++){ dp[i][j] = add(dp[i][j],mul({dp[i-1][j-k],ch(ni,k),ch(ni-k,k),fact[k]})); } } } ll ans = 0; for(ll i = 1;i<=n;i++) ans = add(ans,mul({ch(n,i),fact[2*n-2*i],dp[m][i],fact[i],f(i)})); ans = add(fact[2*n],-ans); cout<<ans<<endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...