Submission #1190523

#TimeUsernameProblemLanguageResultExecution timeMemory
1190523vnedu마스코트 (JOI13_mascots)C++17
100 / 100
254 ms71256 KiB
#include<bits/stdc++.h> using namespace std; //typedef long long ll; template<class T> bool maximize(T &a, const T &b){ return (a < b ? a = b, 1 : 0); } template<class T> bool minimize(T &a, const T &b){ return (a > b ? a = b, 1 : 0); } #define fi first #define se second #define pb push_back #define ii pair<int, int> #define all(x) x.begin(), x.end() #define TASK "nonsense" /// end of template /// const int N = 3e3 + 10; const int mod = 1e9 + 7; int r,c,n,f[N],C[N][N]; void addSelf(int &x, int val) { x+=val; if(x>=mod) x-=mod; else if(x<0) x+=mod; } void init() { f[0]=1; for(int i=1;i<N;++i) f[i]=f[i-1]*1LL*i%mod; for(int i=0;i<N;++i) C[i][0]=1; for(int i=1;i<N;++i) for(int j=1;j<N;++j) { int &cur=C[i][j]; cur=C[i-1][j]+C[i-1][j-1]; if(cur>=mod) cur-=mod; } } int lb=INT_MAX,lt=INT_MIN,ll=INT_MAX,lr=INT_MIN,d1,d2,k,dp[N][N]; void solve() { init(); cin>>r>>c>>n; for(int tri=1;tri<=n;++tri) { int x,y; cin>>x>>y; minimize(lb,x); maximize(lt,x); minimize(ll,y); maximize(lr,y); } // cout<<C[2][1]; // return; d1=lt-lb+1; d2=lr-ll+1; k=lb-1+r-lt+ll-1+c-lr; int ans=1; for(int i=1;i<=d2*d1-n;++i) ans=ans*1LL*i%mod; dp[0][0]=1; for(int sum=0;sum<k;++sum) for(int x1=0;x1<=sum;++x1) { int x2=sum-x1; // cout<<x1<<' '<<x2<<' '<<dp[x1][x2]<<'\n'; addSelf(dp[x1][x2+1],dp[x1][x2]*1LL*f[d1+x1]%mod); addSelf(dp[x1+1][x2],dp[x1][x2]*1LL*f[d2+x2]%mod); } int x1=lb-1+r-lt; int x2=ll-1+c-lr; // cout<<x1<<' '<<lb-1<<' '<<x2<<' '<<ll-1<<'\n'; // cout<<dp[x1][x2]<<'\n'; // cout<<dp[x1][x2]*1LL*C[x1][lb-1]%mod*1LL*C[x2][ll-1]%mod<<'\n'; // cout<<ans<<'\n'; ans=ans*1LL*(dp[x1][x2]*1LL*C[x1][lb-1]%mod*1LL*C[x2][ll-1]%mod)%mod; // cout<<k<<'\n'; // return; cout<<ans; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); // freopen(TASK".inp","r",stdin); // freopen(TASK".out","w",stdout); int testcase=1; // cin>>testcase; while (testcase--) solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...