• 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;
    }
    


  • 相关阅读:
    centos7 计划任务 定时运行sh
    Nginx负载均衡配置 域名和IP 访问时从java request.getServerName()获取不同问题解决
    windows2012激活方式 2016激活方式 windows10激活方式
    CentOS7 安装Chrome
    使用 go-cqhttp 在龙芯和其他平台搭建qq机器人
    KDE桌面无故特效消失和图标黑底
    SDUST 小学期飞机大战简述
    SDUST 小学期飞机大战简述
    宝塔中极速安装的PHP如何使用AMQP连接RabbitMQ
    Electron登录注册桌面应用源码+安装文件的打包方法
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5184265.html
Copyright © 2020-2023  润新知