zoukankan      html  css  js  c++  java
  • 3-04. 一元多项式的乘法与加法运算(20)(ZJU_PAT 结构体)

    题目链接:http://pat.zju.edu.cn/contests/ds/3-04


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

    输入格式说明:

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

    输出格式说明:

    输出分2行。分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。

    数字间以空格分隔,但结尾不能有多余空格。

    例子输入与输出:

    序号 输入 输出
    1
    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
    
    2
    2 1 2 1 0
    2 1 2 -1 0
    
    1 4 -1 0
    2 2
    
    3
    2 -1000 1000 1000 0
    2 1000 1000 -1000 0
    
    -1000000 2000 2000000 1000 -1000000 0
    0 0
    
    4
    0
    1 999 1000
    
    0 0
    999 1000

    代码例如以下:

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <iostream>
    using namespace std;
    const int maxn = 5217;
    typedef struct
    {
        int x, y;
        int m, s;
    } node;
    node num1[maxn], num2[maxn];
    node ans_mul[maxn], ans_sum[maxn];
    int max1, max2, maxx;
    
    void mult()
    {
        for(int i = 0; i <= max1; i++)
        {
            for(int j = 0; j <= max2; j++)
            {
                ans_mul[i+j].m += num1[i].x*num2[j].x;
            }
        }
    }
    
    void sum()
    {
        for(int i = 0; i <= maxx; i++)
        {
            ans_sum[i].s += num1[i].x + num2[i].x;
        }
    }
    int main()
    {
        int n, m;
        scanf("%d",&n);
        int t1, t2;
        max1 = max2 = 0;
        for(int i = 0; i < n; i++)
        {
            scanf("%d %d",&t1,&t2);
            if(t2 > max1)
                max1 = t2;
            num1[t2].x = t1;
        }
        scanf("%d",&m);
        for(int i = 0; i < m; i++)
        {
            scanf("%d%d",&t1,&t2);
            if(t2 > max2)
                max2 = t2;
            num2[t2].x = t1;
        }
        int mul_max = max1+max2;
        maxx = max(max1, max2);
        mult();
        sum();
        int flag = 0;
        for(int i = mul_max; i >= 0; i--)
        {
            if(!ans_mul[i].m)
            {
                continue;
            }
            if(!flag)
            {
                printf("%d %d",ans_mul[i].m,i);
                flag = 1;
            }
            else
            {
                printf(" %d %d",ans_mul[i].m,i);
            }
        }
        if(!flag)
        {
            printf("0 0");
        }
        printf("
    ");
        flag = 0;
        for(int i = maxx; i >= 0; i--)
        {
            if(!ans_sum[i].s)
            {
                continue;
            }
            if(!flag)
            {
                printf("%d %d",ans_sum[i].s,i);
                flag = 1;
            }
            else
            {
                printf(" %d %d",ans_sum[i].s,i);
            }
        }
        if(!flag)
        {
            printf("0 0");
        }
        printf("
    ");
        return 0;
    }
    


  • 相关阅读:
    React-Hooks
    RC-Select 学习笔记
    React Strict Mode
    CSSMotion VS animation in Angular
    jquery中has方法
    jquery中对于extend方法的使用
    一篇对于在jquery中使用jsonp技术介绍
    对于table元素的总结
    css3布局相关样式
    移动端去掉按钮点击热区
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5184265.html
Copyright © 2011-2022 走看看