Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
35803 | LYLAKIOI | 【BJ】T2 | C++ | 运行超时 | 35 | 3000 MS | 218436 KB | 2277 | 2025-01-03 15:46:41 |
#include<bits/stdc++.h> #define up(i,l,r) for(int i=(l);i<=(r);++i) #define down(i,l,r) for(int i=(l);i>=(r);--i) #define pi pair<int,int> #define p1 first #define p2 second #define m_p make_pair #define p_b push_back using namespace std; typedef long long ll; const int N=152; const int mod=1e9+7; inline ll read(){ ll x=0;short t=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')t=-1;ch=getchar();} while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar(); return x*t; } int n,p[4]; int f[N][N<<1][N<<1],g[N][N<<1][N<<1],h[N][N<<1][N<<1],s[N]; const int dx[4]={-1,1,0,0},dy[4]={0,0,1,-1}; void slv(){ n=read();up(i,0,3)p[i]=read(); f[0][N][N]=1; up(i,0,n-1){ up(j,0,i)up(k,0,i-j){ for(int s1:{-1,1})for(int s2:{-1,1}){ int J=N+s1*j,K=N+s2*k; if(j==0&&s1==1)continue; if(k==0&&s2==1)continue; up(l,0,3){ int x=J+dx[l],y=K+dy[l]; (f[i+1][x][y]+=f[i][J][K]*1ll*p[l]%mod)%=mod; } } } } up(i,0,n)up(j,0,i)up(k,0,i-j){ for(int s1:{-1,1})for(int s2:{-1,1}){ int J=N+j*s1,K=N+k*s2; if(j==0&&s1==1)continue; if(k==0&&s2==1)continue; g[i][J][K]=f[i][J][K]; up(l,0,i-1)g[i][J][K]=(g[i][J][K]+mod-g[l][J][K]*1ll*f[i-l][N][N]%mod)%mod; } } up(i,0,n){ s[i]=0; up(j,0,2*N-1)up(k,0,2*N-1)(s[i]+=g[i][j][k])%=mod; }h[0][N][N]=1; up(i,0,n)up(j,0,N)up(k,0,N){ for(int s1:{-1,1})for(int s2:{-1,1}){ int J=N+j*s1,K=N+k*s2; if(j==0&&s1==1)continue; if(k==0&&s2==1)continue; int j_=N+(-j*s1),k_=N+(-k*s2); up(l,1,n-i)(h[i+l][J][K]+=g[l][J][K]*1ll*(s[i]+mod-h[i][j_][k_])%mod)%=mod; } } int ex=0;up(i,0,n)(ex+=s[i])%=mod; int ex2=ex; up(i,0,n)up(j,0,2*N-1)up(k,0,2*N-1)if(j!=N||k!=N)(ex2+=h[i][j][k]*2%mod)%=mod; //cout<<ex<<" "<<ex2<<endl; cout<<(ex2-ex*1ll*ex%mod+mod)%mod; }int main(){ //freopen("kel.in","r",stdin); // freopen("kel.out","w",stdout); slv(); fclose(stdin); fclose(stdout); return 0; }