PTA 线性结构2 一元多项式的乘法与加法运算

来源:互联网 发布:民可使由之 不可使知之 编辑:程序博客网 时间:2024/06/08 06:59

设计函数分别求两个一元多项式的乘积与和。

输入格式:

输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。

输出格式:

输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0。

输入样例:

4 3 4 -5 2 6 1 -2 0
3 5 20 -7 4 3 1
输出样例:

15 24 -25 22 30 21 -10 20 -21 8 35 6 -33 5 14 4 -15 3 18 2 -6 1
5 20 -4 4 -5 2 9 1 -2 0
题目不算太难, 就是有点繁琐。

#include <iostream>#include <algorithm>#include <string.h>#include <cstdio>#define N 2100#define S 1001#define INF 0x3f3f3f3fusing namespace std;typedef struct node{    int idx;    int x;}multi;int main(){    int n, m;    int ans1[N] = {0}, ans2[N] = {0};    multi sh1[N];    scanf("%d", &n);    int maxidx1 = -1;    for(int i = 0; i < n; i++)    {        scanf("%d%d", &sh1[i].x, &sh1[i].idx);        ans1[sh1[i].idx] = sh1[i].x;        maxidx1 = max(maxidx1, sh1[i].idx);    }    int t1, t2;    scanf("%d", &m);    int maxidx2 = -1;    for(int i = 0; i < m; i++)    {        scanf("%d%d", &t1, &t2);        maxidx1 = max(maxidx1, t2);        ans1[t2] += t1;        for(int i = 0; i < n; i++)        {            ans2[sh1[i].idx + t2] += sh1[i].x * t1;            maxidx2 = max(sh1[i].idx + t2, maxidx2);        }    }    bool flag = false;    bool isfist = true;    for(int i = maxidx2; i >= 0; i--)    {        if(!ans2[i])            continue;        if(isfist)            isfist = false;        else            printf(" ");        printf("%d %d", ans2[i], i);        flag = true;    }    if(!flag)    {        printf("0 0");    }    printf("\n");    flag = false;    isfist = true;    for(int i = maxidx1; i >= 0; i--)    {        if(!ans1[i])            continue;        if(isfist)            isfist = false;        else            printf(" ");        printf("%d %d", ans1[i], i);        flag = true;    }    if(!flag)        printf("0 0");    printf("\n");    return 0;}
阅读全文
0 0