根据给出的式子写出几项就会发现 这是一个关于杨辉三角 或者说是二项式系数的一个式子
正负交错 求得那个系数就可以了
但是题目要求的数据大小是3000 那个数据大小会超long long 所以会是大数的计算。。
赛后稍微看了下JAVA大数。。。
数据的读取输入 大数函数的使用。。。。
代码如下:(第一个JAVA程序)
import java.math.BigInteger;
import java.util.*;
class Main {
public static void main(String args[])
{
Scanner cin=new Scanner(System.in);
int tc;
tc=cin.nextInt();
BigInteger[] a=new BigInteger[3010];
while(tc--!=0)
{
BigInteger ans=BigInteger.valueOf(0);
BigInteger b=BigInteger.valueOf(1);
BigInteger c=b;
int n;
n=cin.nextInt();
for(int i=1;i<=n;i++)
{
a[i]=cin.nextBigInteger();
a[i]=a[i].multiply(b);
b=b.multiply(c.valueOf(n-i));
b=b.divide(c.valueOf(i));
// System.out.println(i+" "+b);
}
BigInteger flag=BigInteger.valueOf(1);
for(int i=n;i>=1;i--)
{
// System.out.println(a[i]);
a[i]=a[i].multiply(flag);
ans=ans.add(a[i]);
flag=flag.multiply(flag.valueOf(-1));
}
System.out.println(ans);
}
}
}
第一次写的那个代码 老是WA不知道什么原因。。
import java.util.Scanner;
//import java.math.*;
import java.math.BigInteger;
class jisuan {
public static void main(String args[])
{
int tc;
Scanner cin=new Scanner(System.in);
tc=cin.nextInt();
for(int k=0;k<tc;k++)
{
int n;
BigInteger[] a=new BigInteger[3010];
n=cin.nextInt();
// System.out.println(n);
for(int i=0;i<n;i++)
{
a[i]=cin.nextBigInteger();
// System.out.println(a[i]);
}
BigInteger ans=BigInteger.valueOf(1);
BigInteger[] s=new BigInteger[3010];
s[0]=BigInteger.valueOf(1);
for(int i=0;i<=n-1;i++)
{
BigInteger c=BigInteger.valueOf(n-1-i);
ans=ans.multiply(c);
c=BigInteger.valueOf(i+1);
ans=ans.divide(c);
c=BigInteger.valueOf(-1);
if(i%2!=0) s[i+1]=ans;
else s[i+1]=ans.multiply(c);
// System.out.println(i+" "+s[i]);
// ans=ans>0?ans:-ans;
}
if((n-1)%2!=0) s[n-1]=BigInteger.valueOf(-1);
else s[n-1]=BigInteger.valueOf(1);
BigInteger sum=BigInteger.valueOf(0);
for(int i=0;i<n;i++)
{
BigInteger d;
// System.out.println(s[i]);
d=s[i].multiply(a[n-1-i]);
sum=sum.add(d);
}
System.out.print(sum);
System.out.println();
// cin.close();
}
cin.close();
}
}