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;
	}
}