Submission #1227946

#TimeUsernameProblemLanguageResultExecution timeMemory
1227946_rain_Tents (JOI18_tents)C++20
48 / 100
2093 ms328 KiB
#include<bits/stdc++.h> using namespace std; typedef long long LL; const int MOD=(int)1e9+7; int add(int a,int b){ return a+b>=MOD?a+b-MOD:a+b; } int sub(int a,int b){ return a-b<0?a-b+MOD:a-b; } int mul(int a,int b){ return (LL)a*b%MOD; } int power(int a,int b){ int res=1; for(;b;b>>=1,a=mul(a,a)){ if (b&1) res=mul(res,a); } return res; } const int N=(int)3000; int fac[N+2] , inv[N+2]; int ff[N*2+2]={}; void build(){ fac[0]=1; for(int i=1;i<=N;++i) fac[i]=mul(fac[i-1],i); inv[N]=power(fac[N],MOD-2); for(int i=N;i>=1;--i) inv[i-1]=mul(inv[i],i); ff[0]=1; for(int i=2;i<=N*2;i+=2) ff[i]=mul(ff[i-2],i-1); return; } int C(int x,int y){ if (x>y) return 0; return (LL)fac[y]*inv[y-x]%MOD*inv[x]%MOD; } int numrow,numcol; int ans2(int a,int b){ int ans=0; for(int i=0;i<=N && i*2<=a;++i){ for(int j=0;j<=N && j*2<=b;++j){ if (i*2+j>a||j*2+i>b) continue; int addmore=1; addmore=mul(addmore,C(i*2+j,a)); addmore=mul(addmore,C(j*2+i,b)); addmore=mul(addmore,C(j,i*2+j)); addmore=mul(addmore,C(i,j*2+i)); addmore=mul(addmore,fac[i]) , addmore=mul(addmore,fac[j]); addmore=mul(addmore,ff[2*i]) , addmore=mul(addmore,ff[2*j]); ans=add(ans,addmore); } } return ans; } int calc(int a,int b){ int ans=0; for(int i=0;i<=min(a,b);++i){ int addmore=power(4,i); addmore=mul(addmore,C(i,a)); addmore=mul(addmore,C(i,b)); addmore=mul(addmore,ans2(a-i,b-i)); addmore=mul(addmore,fac[i]); ans=add(ans,addmore); } return ans; } int main(){ ios::sync_with_stdio(false); cin.tie(0) ; cout.tie(0); #define task "main" if (fopen(task".inp","r")){ freopen(task".inp","r",stdin); freopen(task".out","w",stdout); } cin>>numrow>>numcol; build(); cout<<sub(calc(numrow,numcol),1); return 0; }

Compilation message (stderr)

tents.cpp: In function 'int main()':
tents.cpp:79:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   79 |                 freopen(task".inp","r",stdin);
      |                 ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
tents.cpp:80:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   80 |                 freopen(task".out","w",stdout);
      |                 ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...