Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
35804 | baka24 | 【BJ】T2 | C++ | 运行超时 | 65 | 3000 MS | 344360 KB | 1906 | 2025-01-03 15:48:55 |
#include<bits/stdc++.h> using namespace std; #define int long long int read(){int x=0,f=1;char c=getchar();while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();return x*f;} const int MAXN=160,N=155,Mod=1e9+7; void add(int &x,int y){x+=y;if(x>=Mod)x-=Mod;if(x<0)x+=Mod;} int n,pl,pr,pu,pd; int p[MAXN],f[MAXN][MAXN<<1][MAXN<<1],g[MAXN][MAXN<<1][MAXN<<1],h[MAXN][MAXN<<1][MAXN<<1]; void slv(){ n=read(),pl=read(),pr=read(),pu=read(),pd=read(); g[0][N][N]=1; for(int i=1;i<=n;i++){ for(int x=-i;x<=i;x++){ for(int y=-i;y<=i;y++){ add(g[i][x+N][y+N],g[i-1][x-1+N][y+N]*pu%Mod); add(g[i][x+N][y+N],g[i-1][x+N][y-1+N]*pr%Mod); add(g[i][x+N][y+N],g[i-1][x+1+N][y+N]*pd%Mod); add(g[i][x+N][y+N],g[i-1][x+N][y+1+N]*pl%Mod); } } } p[0]=h[0][N][N]=1; for(int i=1;i<=n;i++) for(int x=-i;x<=i;x++) for(int y=-i;y<=i;y++){ h[i][x+N][y+N]=g[i][x+N][y+N]; for(int j=0;j<i;j++)add(h[i][x+N][y+N],-h[j][x+N][y+N]*g[i-j][N][N]%Mod); add(p[i],h[i][x+N][y+N]); } f[0][N][N]=1; for(int i=1;i<=n;i++) for(int j=1;j<=i;j++) for(int x=-i;x<=i;x++) for(int y=-i;y<=i;y++)add(f[i][x+N][y+N],(p[i-j]-f[i-j][N-x][N-y])%Mod*h[j][x+N][y+N]%Mod); int ex=0,ans=0; for(int i=0;i<=n;i++)add(ex,p[i]); ans=ex; for(int i=1;i<=n;i++){ for(int x=-i;x<=i;x++){ for(int y=-i;y<=i;y++){ add(ans,2*f[i][x+N][y+N]%Mod); } } } printf("%lld",(ans%Mod-ex*ex%Mod+Mod)%Mod); } signed main(){ //freopen("kel.in","r",stdin);freopen("kel.out","w",stdout); slv(); //cerr<<(clock())*1.0/CLOCKS_PER_SEC<<endl; return 0; }