这题在比赛的时候用c++的大整数写,找了网上的各种模板,最后还是超时了,而且代码写200行。
所以决定去学java,这样以后写大整数就方便多了
这题的题意很简单,有递推得到最终的结果就是SUM(-1)^i *C(i,n-1)*an-1( 0<= i < n)
然后用java写就可以了
代码如下:
import java.math.BigInteger;
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int t = cin.nextInt();
BigInteger a[] = new BigInteger[3005]; //build array
BigInteger c[] = new BigInteger[3005];
while(t-- > 0)
{
int i;
int n = cin.nextInt();
for(i = 1; i <= n; i++)
a[i] = cin.nextBigInteger();
c[0] = c[n-1] = BigInteger.valueOf(1) ;
int m = n-1;
for(i = 1; i <= (m+1)/2; i++){
c[i] = c[i-1].multiply(BigInteger.valueOf(m-i+1));
c[i] = c[i].divide(BigInteger.valueOf(i));
c[m-i] = c[i];
}
BigInteger ans = BigInteger.valueOf(0);//强制转换
for(i = 0; i < n; i++)
{
BigInteger temp = a[n-i].multiply(c[i]);
if(i % 2 == 1) ans = ans.subtract(temp);
else ans = ans.add(temp);
}
System.out.println(ans);
}
}
}