noj 1006 多项式乘法

南邮 OJ 1006 多项式乘法 多项式乘法 时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte 总提交 : 434            测试通过 : 206  比赛描述 线性表是一种最简单、最基本,也是最常用的数据结构,其用途十分广泛,例如,用带表头结点的单链表求解一元整系数多项式加法和乘法运算。 现给两个一元整系数多项式,请求解两者的 阅读详情

多项式乘法
时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte
总提交 : 677 测试通过 : 332

比赛描述

线性表是一种最简单、最基本,也是最常用的数据结构,其用途十分广泛,例如,用带表头结点的单链表求解一元整系数多项式加法和乘法运算。

现给两个一元整系数多项式,请求解两者的乘积。

输入

两组数据,每一组代表一个一元整系数多项式,有多行组成,其中每一行给出多项式每一项的系数和指数,这些行按指数递减次序排序。每一组结束行输入为0 -1

输出

三组数据,前两组为一元整系数多项式,最后一组为两个多项式的乘积。

一元整系数多项式输出形式如下:

(1)多项式项4x输出为4X

(2)多项式项4x2输出为4X^2

(3)第一项系数为正数时,加号不要输出

(4)除常系数项外,项系数为1不显式输出,-1输出为-

例如,4x3- x2+x-1正确输出形式为4X^3-X^2+X-1,错误输出形式为 +4X^3-1X^2+1X-1

样例输入

3 14
-8 8
6 2
2 0
0 -1
2 10
4 8
-6 2
0 -1

样例输出

3X^14-8X^8+6X^2+2
2X^10+4X^8-6X^2
6X^24+12X^22-16X^18-50X^16+12X^12+76X^10+8X^8-36X^4-12X^2

提示

该题属于南京邮电大学《数据结构A》实验一中的内容,验证的是课本代码,请慎重解答。

题目来源

CHENZ

题目链接:http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1006

解题思路:前半部分同noj 1005。多项式相乘的结果用另外两个数组存储,两层for循环保证每一个小项相乘得到新的小项,系数相乘,指数相加,例如系数为x,指数为y,用数组cy[]=y 存储指数,用数组c[y]=x存储指数y对应的系数x,因此在小项相乘的同时,用 c[y]+=x 可以很方便地合并同类项。然后对cy[]从大到小排序去重,最后输出即可。

代码如下:

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn=10000+5;
int ax[maxn],ay[maxn];
int bx[maxn],by[maxn];
int cy[maxn],c[maxn];
int main(void)
{
    int x,y;
    bool q=false;
    memset(ax,0,sizeof(ax));
    memset(bx,0,sizeof(bx));
    memset(ay,0,sizeof(ay));
    memset(by,0,sizeof(by));
    bool f=true;
    int n=0,m=0;
    while(scanf("%d%d",&x,&y))
    {
        if(x==0 && y==-1)
            break;
        ax[n]=x;
        ay[n++]=y;
    }
    while(scanf("%d%d",&x,&y))
    {
        if(x==0 && y==-1)
            break;
        bx[m]=x;
        by[m++]=y;
    }
    for(int i=0;i<n;i++)
    {
        if(ax[i]==0)
            continue;
        if(ax[i]!=1 && (f || ax[i]<0))
        {
            if(ax[i]==-1 && ay[i]!=0)
                printf("-");
            else
                printf("%d",ax[i]);
        }
        else
        { 
            if(ax[i]==1)
            {
                if(f)
                {
                    if(ay[i]==0)
                        printf("1");
                }
                else
                {
                    if(ay[i]==0)
                        printf("+1");
                    else
                        printf("+");
                }
            }
            else if(ax[i]!=1 && !f)
                printf("+%d", ax[i]);
        }
        if(ay[i]==1)
            printf("X");
        else if(ay[i]!=0)
            printf("X^%d", ay[i]);
        f=false;
    }
    printf("\n");
    f=true;
    for(int i=0;i<m;i++)
    {
        if(bx[i]==0)
            continue;
        if(bx[i]!=1 && (f || bx[i]<0))
        {
            if(bx[i]==-1 && by[i]!=0)
                printf("-");
            else
                printf("%d",bx[i]);
        }
        else
        {
            if(bx[i]==1)
            {
                if(f)
                {
                    if(by[i]==0)
                        printf("1");
                }
                else
                {
                    if(by[i]==0)
                        printf("+1");
                    else
                        printf("+");
                }
            }
            else if(bx[i]!=1 && !f)
                printf("+%d", bx[i]);
        }
        if(by[i]==1)
            printf("X");
        else if(by[i]!=0)
            printf("X^%d", by[i]);
        f=false;
    }
    printf("\n");
    f=true;
    int len=0;
    memset(c,0,sizeof(c));
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
        {
            x=ax[i]*bx[j];
            y=ay[i]+by[j];
            cy[len++]=y;
            c[y]+=x;
        //  printf("%d %d\n",x,y );
        }
    sort(cy,cy+len);
    len=unique(cy,cy+len)-cy;
    for(int i=len-1;i>=0;i--)
    {
        if(c[cy[i]]==0)
            continue;
        if(c[cy[i]]!=1 && (f || c[cy[i]]<0))
        {
            if(c[cy[i]]==-1 && cy[i]!=0)
                printf("-");
            else
                printf("%d",c[cy[i]]);
        }
        else
        { 
            if(c[cy[i]]==1)
            {
                if(f)
                {
                    if(cy[i]==0)
                        printf("1");
                }
                else
                {
                    if(cy[i]==0)
                        printf("+1");
                    else
                        printf("+");
                }
            }
            else if(c[cy[i]]!=1 && !f)
                printf("+%d", c[cy[i]]);
        }
        if(cy[i]==1)
            printf("X");
        else if(cy[i]!=0)
            printf("X^%d", cy[i]);
        f=false;
        q=true;
    }
    if(q)
        printf("\n");
    else
        printf("0\n");
}
C++实现多项式的加法和乘法计算 总时间限制: 1000ms内存限制: 65536kB描述使用带头结点的单链表存储一个多项式,设计多项式加法、乘法及显示多项式的算法。 提示:1)使用带头结点单链表存储表示一个多项式,多项式结点按指数降序链接;2)结点可以如下定义:     struct Node{         int exp;  //指数         int coef; //系数         struct Node *... 阅读详情

相关推荐

多项式加法参考答案.cpp

题目内容: 一个多项式可以表达为x的各次幂与系数乘积的和,比如: 2x6+3x5+12x3+6x+20 现在,你的程序要读入两个多项式,然后输出这两个多项式的和,也就是把对应的幂上的系数相加然后输出。 程序要处理的幂最大为100。

多项式加法、乘法

学校ACM上面的题目,题目不难,不少细节。

vampire_vivan的专栏 968

多项式乘法实现

数据结构作业,适合初学者,小白,自学者,和大家共享。

ACM 多项式加法

多项式加法 时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte 总提交:1458            测试通过:152 描述 线性表是一种最简单、最基本,也是最常用的数据结构,其用途十分广泛,例如,用带表头结点的单链表求解一元整系数多项式加法和乘法运算。 现给两个一元整系数多项式,请求解两者之和。 输入 两组数据

我的博客 1943

NOJ史上最全答案

最全答案有所有西北工业大学网上作业答案,可以无限期使用

瑞芯微RK3506开发板Ethercat主站性能优化实战:从内核配置到微秒级延迟控制

本文详细介绍了在瑞芯微RK3506开发板上实现EtherCAT主站微秒级延迟控制的实战优化方案。核心在于部署Preempt-RT实时内核,并进行深度系统调优,包括CPU隔离、中断亲和性设置、内存锁定及电源管理调整。通过绕过Linux网络栈的专用驱动加载与配置,最终实现了稳定的高性能实时控制,满足工业自动化需求。

tcp8optimizer的博客 315

多项式乘法

题目的链接为:http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1006 题目为: 多项式乘法 时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte 总提交:171            测试通过:77 描述 线性

卧龙居 1509

别再手动配IP了!用NI-USRP Configuration Utility快速搞定USRP 2954与LabVIEW连接

本文详细介绍了如何使用NI-USRP Configuration Utility快速配置USRP 2954与LabVIEW的连接,解决传统手动IP配置的繁琐问题。通过图形化工具自动完成设备发现、IP设置和连接验证,大幅提升软件无线电实验效率,特别适合信号收发应用场景。

weixin_27102543的博客 292

多项式加法

题目的链接为http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1005 题目如下: 多项式加法 时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte 总提交:964            测试通过:100 描述 线

卧龙居 5570

Claude Desktop Cowork国内实操指南:本地文件自动化办公

大语言模型正从‘问答式AI’迈向‘执行型协作者’,其核心能力在于直接操作本地文件、调用系统工具并嵌入真实工作流。Claude Desktop的Cowork模式正是这一范式的代表,它通过轻量沙箱VM实现对Excel、PPT、PDF、音视频等办公资产的读写与处理,无需手动编码即可完成数据清洗、会议纪要生成、自动化报告输出等任务。技术价值体现在权限可控、环境隔离、结果可交付;典型场景覆盖行政文秘的文档流转、销售运营的数据分析、开发者的脚本调试与环境验证。本文聚焦国内用户高频卡点——网络链路、系统权限与工作流断层,

weixin_30617737的博客 465

手把手教你玩转RISC-V指令集​​​专栏--​​1.2 对比x86/ARM:RISC-V的三大核心优势(开放、灵活、可扩展)​

​:RISC-V以“开放打破垄断、灵活适配场景、扩展定义未来”的三大优势,正在重塑计算架构格局。其核心价值不仅是技术革新,更是对全球半导体产业链话语权的重新分配。

amy_mhd的博客 130

南邮23考研复试上机[1006最大公约数和最小公倍数]

全力以“复”,力争上“邮”~

qq_56699753的博客 263

【电源专题】LDO基础——热性能2

对于LDO散热而言,选择合适的元件并不是一件简单的任务。为了实现高效、尺寸得当并成本低的散热解决方案,我们在早期设计阶段就需要确保所有器件都可用并且已经考虑到元件和各种特性。

一点硬件 894

1012:计算多项式的值

1012:计算多项式的值 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 48906 通过数: 30213 【题目描述】 对于多项式f(x)=ax3+bx2+cx+d和给定的a,b,c,d,x,计算f(x)的值,保留到小数点后7位。 【输入】 输入仅一行,包含5个实数,分别是x,及参数a、b、c、d的值,每个数都是绝对值不超过100的双精度浮点数。数与数之间以一个空格分开。 【输出】 输出一个实数,即f(x)的值,保留到小数点后7位。 【输入样例】 2.31 1.

CpythonHume的博客 1713

手把手教你学Simulink实例:基于Simulink的锂电池管理系统(BMS)仿真

是确保锂电池安全、高效运行的关键组件。BMS 主要功能包括监控电池的状态(如电压、电流、温度)、估算荷电状态(State of Charge, SOC)、健康状态(State of Health, SOH),以及实现电池均衡和保护机制等。Simulink 提供了一个强大的仿真环境,可以用来设计、分析和验证锂电池管理系统的控制策略。常见的均衡方法包括被动均衡(通过电阻放电)和主动均衡(通过开关电容或变压器)。通过本教程,我们详细介绍了如何使用 Simulink 进行锂电池管理系统的仿真实例。

MHD0815的博客 538

2025年华为杯中国研究生数学建模竞赛E题 高速列车轴承智能故障诊断问题 思路+代码

all_data, file_info = preprocessor.load_mat_files(file_list[:50]) # 加载前50个文件作为示例。[y_source, y_source, domain_labels], # 注意:这里使用伪标签。X_target = np.random.randn(100, X_source.shape[1], 1) # 示例数据。"""构建CNN-Transformer混合模型""""""构建Transformer模型"""

YOLO 1046

c语言多项式的猜想noj

利用函数迭代算法得出结果。 #include <stdio.h> #include <stdlib.h> int findn(int M){ int n,f1=1,f2=1,fn,s=1; for(n=1;;n++){ fn=f1+2*f2; f1=f2,f2=fn; s+=f1; if(s>=M) break; } return n; }

m0_74214978的博客 455

【论文复现】——基于NDT与ICP结合的点云配准算法(matlab版)

基于NDT与ICP结合的点云配准算法matlab版

点云侠的博客 489

多项式的猜想

#include #include int getA ( int n ) { if ( n == 1 || n == 2 ) { return 1; } else { return 2 * getA ( n - 1 ) + getA ( n - 2 ); } } int getS ( int n ) { int i, s = 0; for ( i = 1; i <=

young_Tao的博客 1299

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

洛谷OJ P3803 【模板】多项式乘法(FFT)

题目链接:https://www.luogu.org/problemnew/show/P3803 题目思路:FFT模板题 AC代码: // luogu-judger-enable-o2 #include &lt;stdio.h&gt; #include &lt;string.h&gt; #include &lt;iostream&gt; #include &lt;algorithm&gt;...

baodream的博客 575

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

第六周 习题

1多项式加法(5分) 题目内容: 一个多项式可以表达为x的各次幂与系数乘积的和,比如: 现在,你的程序要读入两个多项式,然后输出这两个多项式的和,也就是把对应的幂上的系数相加然后输出。 程序要处理的幂最大为100。输入格式: 总共要输入两个多项式,每个多项式的输入格式如下: 每行输入两个数字,第一个表示幂次,第二个表示该幂次的系数,所有的系数都是整数。第一行一定是最高幂,最后一行一定

AverageJoeWang's Blog 1498

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

[笔记]ACM笔记 - 利用FFT求卷积(求多项式乘法)

卷积 给定向量:a=(a0,a1,...,an−1),b=(b0,b1,...,bn−1) 向量和:a+b=(a0+b0,a1+b1,...,an−1+bn−1) 数量积(内积、点积):a⋅b=a0b0+a1b1+...+an−1bn−1 卷积:a⊗b=(c0,c1,...,c2n−2),其中ck=∑i+j=k(aibj) 例如:cn−1=a0bn−1+a1bn−2+...

weixin_30932215的博客 772

ZZULIOJ 1794 多项式相加

Description 一个多项式可以表达为x的各次幂与系数乘积的和,比如:2x6+3x5+12x3+6x+20,现在你的程序要读入两个多项式,然后输出这两个多项式的和,也就是把对应的幂上的系数相加然后输出。幂最大为100。 Input 首先输入一个整数t,表示有t组数据。 每组测试要输入两个多项式,每个多项式对应多行输入,格式如下: 每行输入两个数字 k 和 a,对

A_ice 1843
上一篇: noj 1005 多项式加法
下一篇: noj 1046 第K回文数
雨狮子
博客等级 码龄12年 24粉丝 185原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值