http://acm.hdu.edu.cn/showproblem.php?pid=6415
规律题。
需要用大数。
比赛跑2000ms左右的都是c++大数
至于0ms的估计是直接公式。。。
代码是转的java版本。。
感觉这种规律是真的想不到。。。
import java.math.BigInteger;
import java.awt.Container;
import java.math.*;
import java.math.BigInteger;
import java.util.*;
import org.omg.PortableServer.ID_ASSIGNMENT_POLICY_ID;
public class Main
{
public static void main(String[] args)
{
Scanner cin=new Scanner(System.in);
int t = cin.nextInt();
for(int i=1;i<=t;i++)
{
int n = cin.nextInt();
int m = cin.nextInt();
BigInteger k = cin.nextBigInteger();
if(n==1)
{
BigInteger ans = BigInteger.ONE;
for(int j=1;j<=m;j++)
{
ans = ans.multiply(BigInteger.valueOf(j));
}
ans = ans.mod(k);
System.out.println(ans);
}
else {
BigInteger ans1 = BigInteger.ONE;
for(int j=1;j<=n;j++)
{
ans1 = ans1.multiply(BigInteger.valueOf(j));
}
//System.out.println(ans1);
for(int j=2;j<=m;j++)
{
BigInteger tt = BigInteger.valueOf(j*n);
BigInteger temp = BigInteger.ONE;
for(int kk=0;kk<n;kk++)
{
temp = temp.multiply(tt.subtract(BigInteger.valueOf(kk)));
}
ans1 = ans1.multiply(temp);
ans1 = ans1.multiply(BigInteger.valueOf(j)).divide(BigInteger.valueOf(j+n-1));
}
ans1 = ans1.mod(k);
System.out.println(ans1);
}
}
cin.close();
}
}