제출 #1149657

#제출 시각아이디문제언어결과실행 시간메모리
1149657dostsTents (JOI18_tents)C++20
48 / 100
2095 ms14404 KiB
#include <bits/stdc++.h> #pragma GCC target("avx2") #pragma GCC optimize("O3,unroll-loops") using namespace std; #define int long long #define pii pair<int,int> #define ff first #define ss second #define sp << " " << #define all(cont) cont.begin(),cont.end() #define vi vector<int> const int inf = 1e17,N = 3e5+1,MOD = 1e9+7,BL = 1000; int add(int x,int y){ return ((x+y >= MOD) ? x+y-MOD : x+y); } int mult(int x,int y) { return (x*y)%MOD; } int expo(int x,int y) { if (!y) return 1; int e = expo(x,y/2); e = mult(e,e); if (y&1) e = mult(e,x); return e; } int divide(int x,int y) { return mult(x,expo(y,MOD-2)); } int f[N],finv[N]; void combo() { f[0] = 1; for (int i=1;i<N;i++) f[i] = mult(i,f[i-1]); finv[N-1] = divide(1,f[N-1]); for (int i = N-2;i>=0;i--) finv[i] = mult(finv[i+1],i+1); } int nck(int n,int k) { if (n < k) return 0; return mult(f[n],mult(finv[k],finv[n-k])); } int emp[3001][3001]; int calc(int n,int m,int y,int v) { if (n < y+2*v) return 0; if (m < v+2*y) return 0; int rowlar = nck(n,y); int collar = divide(f[m],mult(f[m-2*y],expo(2,y))); int dikey = nck(m-2*y,v); int yatay = divide(f[n-y],mult(f[n-y-2*v],expo(2,v))); int otras = emp[n-y-2*v][m-v-2*y]; return mult(otras,mult(mult(rowlar,collar),mult(dikey,yatay))); } void solve() { combo(); int n,m; cin >> n >> m; for (int i=0;i<=n;i++) { for (int j = 0;j<=m;j++) { int pw = 1; for (int t = 0;t <= min(i,j);t++) { emp[i][j] = add(emp[i][j],mult(f[t],mult(pw,mult(nck(j,t),nck(i,t))))); pw = mult(pw,4); } } } int ans = 0; for (int i=0;i<=n;i++) { for (int j = 0;j<=m;j++) { ans = add(ans,calc(n,m,i,j)); } } ans = add(ans,MOD-1); cout << ans << '\n'; } int32_t main() { ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); #ifdef Dodi freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); #endif int t = 1; //cin >> t; while (t --> 0) solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...