HDU4927 Series 1 高精度

题意:一个数列每一次将它变为  bi = ai+1 - ai    最后数组变为一个数,问你这个数答案为多少。

解题思路:最开始以为这个数一定是在int范围以内的,但是推出了公式就不湿了  公式应该是  C(n,0)*a[n] - C(n,1)*a[n-1] + C(n,2)*a[n-2] ....一直到 a[1],

可以知道这个题系数是二项分布,所以直接用JAVA大数类 a掉的,java大数类有个很恶心的性质,数越大,操作越慢,所以要避免这个情况

解题代码:

 1 import java.math.BigInteger;
 2 import java.util.Scanner;
 3 import java.io.*;
 4
 5 public class Main {
 6     public static void main(String[] args) {
 7         Scanner cin = new Scanner(System.in);
 8             int t,n;
 9             BigInteger[] a = new BigInteger[3004];
10             BigInteger[] b = new BigInteger[3004];
11         //    BigInteger[][] c = new BigInteger[3004][1500];
12             b[0] = BigInteger.valueOf(1);
13             t=cin.nextInt();
14             while(t > 0)
15             {
16               t--;
17               BigInteger  ans = BigInteger.valueOf(0);
18               n = cin.nextInt();
19               for(int i = 1;i <= n-1;i ++)
20               {
21                   b[i] = b[i-1].multiply(BigInteger.valueOf(n-i));
22                   b[i] = b[i].divide(BigInteger.valueOf(i));
23               }
24               int j = 0;
25               if(n % 2 == 0)
26                   j = 1;
27               for(int i = 1;i <= n;i ++,j++)
28               {
29                  a[i] = cin.nextBigInteger();
30                 //a[i].multiply(b[n-1].divide(b[i-1].multiply(b[n-i])));
31                  a[i] = a[i].multiply(b[i-1]);
32                  if(j % 2 == 0 )
33                    ans = ans.add(a[i]);
34                  else ans = ans.subtract(a[i]);
35                 // System.out.println(a[i]);
36
37             }
38           System.out.println(ans);
39         }
40     }
41 }

HDU4927 Series 1 高精度

时间: 2024-10-25 12:42:20

HDU4927 Series 1 高精度的相关文章

hdu4927 Series 1(组合+公式 Java大数高精度运算)

题目链接: Series 1 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 423    Accepted Submission(s): 146 Problem Description Let A be an integral series {A1, A2, . . . , An}. The zero-order series o

HDU 4927 Series 1(高精度+杨辉三角)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4927 解题报告:对于n,结果如下: C(0,n-1) *A[n] - C(1,n-1) * A[n-1] + C(2,n-1) * A[n-2] - C(3,n-1) * A[n-3] ....... C(n-1,n-1) * A[1]; n <= 3000,到了后面二项式会很大,因为要用到高精度的乘法和除法,所以直接用java的大数类写了,简单多了. 1 import java.math.BigI

HDU4927(Series 1)

题目地址:Series 1 题目大意: 有一个序列A集合为{A1,A2.....An}.第0个序列为其本身,第一个序列为后一个减去前一个(例:A2-A1,A3-A2...An-An-1)以此类推,则第n-1个序列就一定为一个数.输出这个数. 解题思路: 通过计算求出的这个数ans=aA1+a2A2..anAn.  则前面的系数为杨辉三角里第n行的系数(二项式系数),从最后一个系数符号为正,一正一负一次往前类推. 处理大数问题,用java编写. 代码: 1 import java.util.*;

hdu 4927 Series 1(高精度) 2014多校训练第6场

Series 1                                                                            Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Problem Description Let A be an integral series {A1, A2, . . . , An}. The zero-o

HDU4927:Series 1(JAVA大数)

Problem Description Let A be an integral series {A1, A2, . . . , An}. The zero-order series of A is A itself. The first-order series of A is {B1, B2, . . . , Bn-1},where Bi = Ai+1 - Ai. The ith-order series of A is the first-order series of its (i -

HDU 4927 Series 1 ( 组合+高精度)

Series 1 大意: 题意不好翻译,英文看懂也不是非常麻烦,就不翻译了. Problem Description Let A be an integral series {A1, A2, . . . , An}. The zero-order series of A is A itself. The first-order series of A is {B1, B2, . . . , Bn-1},where Bi = Ai+1 - Ai. The ith-order series of A

HDU 4927 Series 1(推理+大数)

HDU 4927 Series 1 题目链接 题意:给定一个序列,要求不断求差值序列,直到剩一个,输出这个数字 思路:由于有高精度一步,所以要推理一下公式,其实纸上模拟一下很容易推出公式就是一个类似杨辉三角的组合数求和,不过奇数位置是加,偶数位置是减,然后高精度过掉 代码: 本人的第一个JAVA程序^ ^ import java.util.Scanner; import java.math.BigInteger; public class Main { public static void ma

hdu 4927 Series 1(组合+公式)

题目链接:hdu 4927 Series 1 题目大意:给定一个长度为n的序列a,每次生成一个新的序列,长度为n-1,新序列b中bi=ai+1?ai,直到序列长度为1.输出最后的数. 解题思路:n最多才3000,ai最大也才1000,貌似不会超int,但是要注意,有些数不止被计算了一次,最多的数被计算了C(15003000),所以肯定要用高精度处理,那么用o(n2)的复杂度肯定就跪了.其实对于最后的ans,ans=∑i=0n?1C(in?1)?ai?(?1)i+1(类似杨辉三角) import

Series 1 java秒组合数

Series 1 举几个例子发现,  系数中间对称,很容易想到组合数 c(n,m)==c[n,n-m).此题就是高精度求组合数,java秒之. time:1825ms   ,接近时限,如果n还稍微大一点就超时. 1 import java.math.*; 2 import java.util.*; 3 import java.io.*; 4 import java.text.*; 5 6 public class Main 7 { 8 static int MS=3005; 9 public s