一元多项式的乘法与加法运算

news2025/2/27 17:20:42

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

输入格式:

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

输出格式:

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

#include <iostream>
#include <vector>
#include <algorithm>
#include <list>
using namespace std;
class MyCompare
{
public:
    bool operator()(pair<int, int> p1, pair<int, int> p2)
    {
        if (p1.first > p2.first)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
};

int main()
{
    vector<pair<int, int>> v1;
    vector<pair<int, int>> v2;
    vector<pair<int, int>> v3;// 和
    vector<pair<int, int>> v4;// 积
    
    int number_of_terms = 0;
    scanf("%d", &number_of_terms);
    while (number_of_terms != 0)
    {
        int coefficient = 0;
        int index = 0;
        scanf("%d", &coefficient);
        scanf("%d", &index);
        number_of_terms--;
        v1.push_back(pair<int, int>(index, coefficient));
    }

    scanf("%d", &number_of_terms);
    while (number_of_terms != 0)
    {
        int coefficient = 0;
        int index = 0;
        scanf("%d", &coefficient);
        scanf("%d", &index);
        number_of_terms--;
        v2.push_back(pair<int, int>(index, coefficient));
    }

    // 求积
    for (int i = 0; i < v1.size(); i++)
    {
        for (int j = 0; j < v2.size(); j++)
        {
            v4.push_back(pair<int, int>(v1[i].first+v2[j].first, v1[i].second*v2[j].second));
        }
    }
    
    sort(v4.begin(), v4.end(), MyCompare());
    list<pair<int, int>> tmp(v4.begin(), v4.end());
    auto cur = tmp.begin();
    cur++;
    auto prev = tmp.begin();
    while (cur != tmp.end())
    {
        if (cur->first == prev->first)
        {
            prev->second = prev->second + cur->second;
            cur = tmp.erase(cur);
        }
        else
        {
            prev++;
            cur++;
        }
    }

    cur = tmp.begin();
    while(cur != tmp.end())
    {
        if (cur->second == 0)
        {
            cur = tmp.erase(cur);
        }
        else{
            cur++;
        }
    }

    if (tmp.empty())
    {
        tmp.push_back(pair<int,int>(0,0));
    }
    cur = tmp.begin();
    int y = 0;
    int size = tmp.size();
    while (cur != tmp.end())
    {
        if (y != size - 1)
        {
            cout << cur->second << ' ' << cur->first << ' ';
            cur++;
            y++;
        }
        else
        {
            cout << cur->second << ' ' << cur->first;
            cout << endl;
            cur++;
            y++;
        }
    }
    
    // 求和
    int i = 0;
    int j = 0;
    while (i < v1.size() && j < v2.size())
    {
        if (v1[i].first > v2[j].first)
        {
            v3.push_back(v1[i]);
            i++;
        }
        else if (v1[i].first < v2[j].first)
        {
            v3.push_back(v2[j]);
            j++;
        }
        else
        {
            v3.push_back(pair<int, int>(v1[i].first, v1[i].second + v2[j].second));
            i++;
            j++;
        }
    }
    
    if (i == v1.size())
    {
        while (j < v2.size())
        {
            v3.push_back(v2[j]);
            j++;
        }
    }
    
    if (j == v2.size())
    {
        while (i < v1.size())
        {
            v3.push_back(v1[i]);
            i++;
        }
    }

    list<pair<int, int>> tmp2(v3.begin(), v3.end());
    auto cur2 = tmp2.begin();
    while(cur2 != tmp2.end())
    {
        if (cur2->second == 0)
        {
            cur2 = tmp2.erase(cur2);
        }
        else{
            cur2++;
        }
    }
    if (tmp2.empty())
    {
        tmp2.push_back(pair<int,int>(0,0));
    }

    cur2 = tmp2.begin();
    y = 0;
    size = tmp2.size();
    while (cur2 != tmp2.end())
    {
        if (y != size - 1)
        {
            cout << cur2->second << ' ' << cur2->first << ' ';
            cur2++;
            y++;
        }
        else
        {
            cout << cur2->second << ' ' << cur2->first;
            
            cur2++;
            y++;
        }
    }

    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/990300.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

正中优配:散户怎么实现T+0?散户在股市上怎么变相T+0?

T0是指当天买入的标的物&#xff0c;在当天就能卖出的买卖方式&#xff0c;其中&#xff0c;在a股市场上&#xff0c;散户能够通过一些办法直接地完成T0买卖方式&#xff0c;接下来&#xff0c;正中优配为大家预备了相关内容&#xff0c;以供参阅。 散户在股票市场上&#xff0…

Linear Decryption: Rate-1 FHE TLP

参考文献&#xff1a; [ILL89] Russell Impagliazzo, Leonid A. Levin, and Michael Luby. Pseudo-random generation from oneway functions (extended abstracts). In 21st Annual ACM Symposium on Theory of Computing, pages 12–24, Seattle, WA, USA, May 15–17, 1989.…

苹果macOS13Ventura更新体验:新功能带来的全新体验

macOS 13 Ventura 是一款功能强大、界面美观的操作系统。它为用户提供了更好的使用体验&#xff0c;加强了与其他设备的互联互通&#xff0c;提高了隐私和安全性。无论是日常办公还是娱乐&#xff0c;macOS 13 Ventura 都能满足用户的需求&#xff0c;并带来更多的便利和乐趣。…

Linux之history、tab、alias、命令执行顺序、管道符以及exit

目录 Linux之history、tab、alias、命令执行顺序、管道符以及exit history历史命令 格式 参数 修改默认记录历史命令条数 案例 案例1 --- 显示history历史记录中出现次数最高的top10 案例2 --- 增加history显示的时间信息 命令与文件名补全 --- tab 命令别名 格式 案…

线性代数的学习和整理22:矩阵的点乘(草稿)

4 矩阵乘法 A,B两个同阶同秩N阵&#xff0c;看上去结构一样&#xff0c;但两厢相乘&#xff0c;在做在右&#xff0c;地位差别巨大。 在左&#xff0c;你就是基&#xff0c;是空间的根本&#xff0c;是坐标系&#xff0c;是往哪去、能到哪的定海神针&#xff0c;是如来佛手&a…

编程语言排行榜

以下是2023年的编程语言排行榜&#xff08;按照流行度排序&#xff09;&#xff1a; Python&#xff1a;Python一直以来都是非常受欢迎的编程语言&#xff0c;它简洁、易读且功能强大。在数据科学、机器学习、人工智能等领域有广泛应用。 JavaScript&#xff1a;作为前端开发…

seatunnel win idea 本地调试

调试FakeSource&#xff0c;LocalFile # Set the basic configuration of the task to be performed env {execution.parallelism 1job.mode "BATCH" }# Create a source to connect to Mongodb source {# This is a example source plugin **only for test and d…

穷举深搜暴搜回溯剪枝(4)

一)单词搜索: 直接在矩阵中依次找到特定字符串 79. 单词搜索 - 力扣&#xff08;LeetCode&#xff09; 画出决策树&#xff0c;只需要做一个深度优先遍历: 1)设计dfs函数:只需要关心每一层在做什么即可&#xff0c;从这个节点开始&#xff0c;开始去尝试匹配字符串的下一个字符…

如何配置视频直播点播平台EasyDSS视频服务平台参数,使同一直播间实现重复推流?

EasyDSS视频直播点播平台集视频直播、点播、转码、管理、录像、检索、时移回看等功能于一体&#xff0c;可提供音视频采集、视频推拉流、播放H.265编码视频等功能&#xff0c;分发的视频流可覆盖全终端、全平台。 EasyDSS已创建的直播间可支持重复推流&#xff0c;但为了保证直…

使用Idea导入mybatis dependence时爆红解决方法

<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.5</version></dependency>如上在pom.xml中配置mybatis的dependence1时出现爆红的情况。 解决方法 找到idea编辑器右侧的maven按钮…

Linux 中的 chroot 命令及示例

Linux/Unix系统中的chroot命令用于更改根目录。Linux/Unix 类系统中的每个进程/命令都有一个称为root 目录的当前工作目录。它更改当前正在运行的进程及其子进程的根目录。 在此类修改的环境中运行的进程/命令无法访问根目录之外的文件。这种修改后的环境称为“ chroot监狱”或…

maven依赖找不到的解决:手动下载、多镜像导入。

maven中央仓库&#xff0c;远在国外&#xff0c;没下载&#xff0c;因为网络原因迟迟下载不下来&#xff0c;所以我们就需要配置一些国内的镜像仓库&#xff0c;来进行jar包的下载。但是阿里的仓库并没有收录中央仓库的全部jar包&#xff0c;因此导致我们有些jar包下载不下来&a…

什么是数据中台,关于数据中台的6问6答6方法

在大数据/数字孪生时代&#xff0c;数据中台已经成为企业治理数据的核心平台。数据中台不仅处理和整合大量数据&#xff0c;还负责数据的存储、管理和保护工作&#xff0c;确保数据的准确性和可用性。数据中台的特点在于其能够提高业务效率&#xff0c;降低成本&#xff0c;增加…

【漏洞复现】深信服科技EDR平台存在任意用户登录漏洞

漏洞描述 深信服终端检测响应平台EDR,通过云网端联动协同、威胁情报共享、多层级响应机制,帮助用户快速处置终端安全问题,构建轻量级、智能化、响应快的下一代终端安全系统。 该EDR系统存在任意用户登录漏洞&#xff0c;攻击者通过漏洞可以登录系统后台并获取服务器的敏感信息…

深入讲解内存分配函数 malloc 原理及实现

任何一个用过或学过C的人对 malloc 都不会陌生。大家都知道malloc可以分配一段连续的内存空间&#xff0c;并且在不再使用时可以通过free释放掉。但是&#xff0c;许多程序员对malloc背后的事情并不熟悉&#xff0c;许多人甚至把malloc当做操作系统所提供的系统调用或C的关键字…

libQGLViewer的编译和使用

文章目录 libQGLViewer的编译和使用1 前言2 libQGLViewer开发环境搭建2.1 Qt Creator的下载安装2.2 libQGLViewer的下载编译2.3 安装Qt Designer 的QGLViewer控件插件&#xff08;可选&#xff09;2.3 关于Qt Designer 的QGLViewer控件插件的一些问题 3 在自己的项目中调用4 总…

苹果macOS 13.5.2正式发布 修复ImageIO进程

9 月 8 日消息&#xff0c;苹果今日向 Mac 电脑用户推送了 macOS 13.5.2 更新&#xff08;内部版本号&#xff1a;22G91&#xff09;&#xff0c;本次更新距离上次发布隔了 21 天。 需要注意的是&#xff0c;因苹果各区域节点服务器配置缓存问题&#xff0c;可能有些地方探测到…

LED屏幕电流驱动设计原理

LED电子显示屏作为户外最大的应用产品&#xff0c;是大型娱乐&#xff0c;体育赛事&#xff0c;广场大屏幕等场所不可或缺的产品&#xff0c;从单双色简单的文字展示到今天的高清全彩&#xff0c;显示屏的技术一直都在进步&#xff0c;全球80%的LED电子显示屏皆产自于中国。显示…

Docker 概念构成

0 概述 构成原理 Docker 客户端(Client)Docker 客户端通过命令行或者其他工具使用 Docker SDK与 Docker 的守护进程通信。Docker 主机(Host)一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。Docker Hub 提供了庞大的镜像集合供使用。一个 Docker Registry 中可以包含多…

小程序代码管理

“微信开发者工具”点击版本管理&#xff0c;然后点击代码管理会打开代码管理网页。 选择对应的项目组。 进来后点击创建项目。 输入git名称&#xff0c;然后选择命名空间&#xff0c;最后创建即可。 在刚才的“微信开发者工具”选择设置&#xff0c;然后添加远程。 输入名称&…