poj 2094 多项式求和。


 1 /**
2 给出多项式 p(x) = an*x^n + an-1*x^(n-1)..... + a1*x + a0;
3 给定n,l,k,m 计算 x 从 l到 l+k-1 的p(x)的后m 位的平方的和
4
5 用差分序列 ,先计算出前 n项 构造出差分表。。后边的k-n个 用递推可得,从下往上递推。
6 **/
7
8 import java.math.BigInteger;
9 import java.util.Scanner;
10
11 public class Main {
12
13 public static int cal(String str, int m) {
14 // System.out.println(str+"------->");
15 int len = Math.min(str.length(), m);
16 int ans = 0, tmp;
17 for (int i = 0; i < len; i++) {
18 tmp = str.charAt(i) - ‘0‘;
19 ans += tmp * tmp;
20 }
21 return ans;
22 }
23
24 public static void main(String[] args) {
25 Scanner cin = new Scanner(System. in);
26 int n = cin.nextInt();
27 BigInteger l = cin.nextBigInteger();
28 int k = cin.nextInt();
29 int m = cin.nextInt();
30 BigInteger mod = BigInteger. TEN.pow(m);
31 BigInteger[] a = new BigInteger[15];
32 for (int i = 0; i <= n; i++)
33 a[i] = cin.nextBigInteger();
34 BigInteger h[][] = new BigInteger[15][15];
35 for (int i = 0; i < Math.min (n + 1, k); i++) {
36 BigInteger res = a[0];
37 for (int j = 1; j <= n; j++) {
38 res = res.multiply(l);
39 res = res.add(a[j]);
40 }
41 res = res.mod(mod);
42 l = l.add(BigInteger. ONE);
43 h[0][i] = res;
44 System. out.println(cal(res.toString(), m));
45 }
46
47 if (k > n + 1) {
48 for (int i = 1; i <= n; i++) {
49 for (int j = 0; j <= n - i; j++)
50 h[i][j] = h[i - 1][j + 1].subtract(h[i - 1][j]);
51 }
52 }
53
54 BigInteger pre[] = new BigInteger[15];
55 for (int i = 0; i <= n; i++) {
56 pre[i] = h[i][n - i];
57 }
58 for (int i = n + 1; i < k; i++) {
59 BigInteger res = h[n][0];
60 for (int j = n - 1; j >= 0; j--) {
61 res = pre[j].add(res);
62 res = res.mod(mod);
63 pre[j] = res;
64 }
65 System. out.println(cal(res.toString(), m));
66 }
67 }
68
69 }

poj 2094 多项式求和。

时间: 2024-10-10 15:31:22

poj 2094 多项式求和。的相关文章

hdu 2011 多项式求和

多项式求和 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 52871    Accepted Submission(s): 30814 Problem Description 多项式的描述如下: 1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + ... 现在请你求出该多项式的前n项的和. Input 输入数据由2行组

多项式求和 AC 杭电

多项式求和 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 50228    Accepted Submission(s): 29277 Problem Description 多项式的描述如下: 1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + ... 现在请你求出该多项式的前n项的和. Input 输入数据由2行组

链表实现多项式求和求积

#include <iostream> #include <cstdio> #include<cstdlib> using namespace std; struct Node { double coef; int expn; Node *next; }; void CreatPolynomial(Node *&head, int n) // 生成带表头结点的单链表,除头结点外另生成n个结点 { head = (Node *)malloc(sizeof(Node

多项式求和

多项式求和 Problem : 420 Time Limit : 1000ms Memory Limit : 65536K description 多项式的描述如下: 1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + ... 现在请你求出该多项式的前n项的和. input 输入数据由2行组成,首先是一个正整数m(m<100),表示测试实例的个数,第二行包含m个正整数,对于每一个整数(不妨设为n,n<1000),求该多项式的前n项的和. output 对于每个测试实例n,要求输

数据结构实践——链表:多项式求和

本文针对数据结构基础系列网络课程(2):线性表的实践项目. [项目 - 多项式求和] 用单链表存储一元多项式,并实现两个多项式的加法. 提示: 1.存储多项式的数据结构 多项式的通式是pn(x)=anxn+an?1xn?1+...+a1x+a0.n次多项式共有n+1项.直观地,可以定义一个数组来存储这n+1个系数.以多项式p(x)=?3.4x10?9.6x8+7.2x2+x为例,存储这个多项式的数组如下图: 可以看出,这种方案适合对某些多项式的处理.但是,在处理一些次数高但项数少的多项式时,存在

2504(多项式求和)

明明很简单,我却错了N++遍,主要原因是在于自己,给自己测试数据时,忘了测大数据,因为只保留小数点后两位,而200以后的数都是0.69. #include <iostream>#include <stdio.h>#include <string.h>#include <stdlib.h>using namespace std;int main(){ double a[1001]; double t; int n,tt; a[0]=0; a[1]=1; for

C算法与数据结构-线性表的应用,多项式求和---ShinePans

/*---上机作业作业,二项式加法---*/ /*---By 潘尚 ---*/ /*---日期: 2014-5-8 . ---*/ /*---题目:---*/ //假设有两个稀疏多项式A和B,设计算法完成下列任务 //1.输入并建立多项式A和B; //2.求两个多项式的和多项式C; //3.求两个多项式的积多项式D; //输出4个多项式A,B,C,D; #include <stdio.h> #include <stdlib.h> #include <string.h>

稀疏多项式求和问题

给定稀疏多项式P和Q,设计实现多项式求和的算法.要求: (1)将结果放入多项式P之中, (2)不允许使用链表, (3)设计2种不同的算法,并分析两种算法的时间和空间复杂性. 方法1: 1 #include <stdio.h> 2 struct poly{ /*构建结构体,含有系数coeff和幂数expo*/ 3 int coeff; 4 int expo; 5 }; 6 int readPoly(struct poly p[10]); 7 int addPoly(struct poly p1[

【算法导论】多项式求和

普通情况下,一元n次多项式可写成: 当中,pi是指数为ei的项的非零系数,且满足 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdGVuZ3dlaXR3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" > 因此.我们能够採用线性表(定义:线性表是由n个数据元素构成的有限序列,比方数组.向量.链表等等)来表示: watermark/2/text/aHR