SRM555 Div1Medium
解法:やるだけ
さすがにこれは自明、なのに0C0を定義し忘れて死。ひどい。
public class XorBoard{ public int count(int a,int b,int c,int d,int e){ int mod=555555555; long ret=0; int C[][]=new int[3000][3000];C[0][0]=1; C[1][0]=C[1][1]=1; for(int i=2;i<3000;i++){ C[i][0]=C[i][i]=1; for(int j=1;j<i;j++){ C[i][j]=(C[i-1][j-1]+C[i-1][j])%mod; } } for(int i=0;i<=a;i++){ for(int j=0;j<=b;j++){ if(i*b+j*a-i*j*2==e){ int f=c-i; int g=d-j; if(f>=0&&g>=0&&f%2==0&&g%2==0){ long val=(long)C[a][i]*C[b][j]%mod; val=val*C[f/2+a-1][a-1]%mod; val=val*C[g/2+b-1][b-1]%mod; ret=(ret+val)%mod; } } } } return (int)ret; } }