【XDOJ2026秋数据结构】758.多项式加减法【Compash个人题解】
758.多项式加减法
问题描述
给定两个多项式,求解其和与差。多项式的项数为M,而最高幂次为N。(1<=M<=10,1<=N<=1000000)
输入说明
输入包含了两个多项式,分为两行给出(同行数据间以空格隔开):
每一行为两组数据:第一组为一个值,表示多项式的非零项数M;第二组为2M个值,每相邻两个值表达一个多项式的非零系数项,分别为系数值、幂次值(其中各项按照幂次的降序排列)。但如果多项式没有非零系数项,则仅用0(M的值)表示,后面没有系数和幂次值出现。例如,第一行的数据为:4 1 10 2 5 3 4 4 0,那么表示多项式有4项,对应的多项式为:x10+2x5+3x4+4. 又例如,第二行的数据为:4 1 8 -2 5 3 3 4 1,表示多项式有4项,对应的多项式为:x8-2x5+3x3+4x。那么上述两个多项式相加的输出结果应为:6 1 10 1 8 3 4 3 3 4 1 4 0,对应的多项式为:x10+x8+3x4+3x3+4x+4.第一个多项式减去第二个多项式的输出结果为:7 1 10 -1 8 4 5 3 4 -3 3 -4 1 4 0,对应多项式:x10-x8+4x5+3x4-3x3-4x+4.
输出说明
输出包含了两个多项式,分为两行给出(同行数据间以空格隔开):
第一行是多项式相加的结果,第二行是多项式相减的结果。每一行为两组数据:第一组为一个值,表示多项式的非零项数M;第二组为2*M个值,每相邻两个值表达一个多项式的非零系数项,分别为系数值、幂次值(其中各项按照幂次的降序排列)。但如果多项式没有非零系数项,则仅用0(M的值)表示,后面没有系数和幂次值出现。
输入样例
//输入样例
例1:
4 1 10 2 5 3 4 4 0
4 1 8 -2 5 3 3 4 1
输出样例
//输出样例
例1:
6 1 10 1 8 3 4 3 3 4 1 4 0
7 1 10 -1 8 4 5 3 4 -3 3 -4 1 4 0
#include<iostream>
int l3size=0,l4size=0;
struct ListNode
{
//系数
int coef;
//指数
int index;
ListNode* next = NULL;
ListNode(int c, int i) : coef(c), index(i) {}
};
void insertListNode(ListNode*& head, int coef, int index)
{
ListNode* newNode = new ListNode(coef, index);
if (head == NULL)
{
head = newNode;
return;
}
ListNode* p = head;
while (p->next)
{
p = p->next;
}
p->next = newNode;
return;
}
int main()
{
int n, m;
int maxIndex = 0;
std::cin >> n;
//两个链表
ListNode* l1 = NULL, * l2 = NULL;
for (int i = 0; i < n; i++)
{
int coef, index;
std::cin >> coef >> index;
maxIndex = std::max(maxIndex, index);
insertListNode(l1, coef, index);
}
std::cin >> m;
for (int i = 0; i < m; i++)
{
int coef, index;
std::cin >> coef >> index;
maxIndex = std::max(maxIndex, index);
insertListNode(l2, coef, index);
}
//p,q分别指向l1与l2的节点
ListNode* p = l1, * q = l2;
//l3存放相加链表,l4存放相减链表
ListNode* l3 = NULL,* l4 = NULL;
// 合并两个链表
while (p != NULL && q != NULL) {
if (p->index == q->index) {
if(p->coef + q->coef)
{
insertListNode(l3,p->coef + q->coef, p->index);
l3size++;
}
if(p->coef - q->coef)
{
insertListNode(l4,p->coef - q->coef,p->index);
l4size++;
}
p = p->next;
q = q->next;
}
else if (p->index > q->index) {
insertListNode(l3, p->coef, p->index);
l3size++;
insertListNode(l4, p->coef, p->index);
l4size++;
p = p->next;
}
else {
insertListNode(l3, q->coef, q->index);
l3size++;
insertListNode(l4, -q->coef, q->index);
l4size++;
q = q->next;
}
}
// 处理剩余节点
while (p != NULL) {
insertListNode(l3, p->coef, p->index);
l3size++;
insertListNode(l4, p->coef, p->index);
l4size++;
p = p->next;
}
while (q != NULL) {
insertListNode(l3, q->coef, q->index);
l3size++;
insertListNode(l4, -q->coef, q->index);
l4size++;
q = q->next;
}
std::cout<<l3size<<' ';
p =l3;
while(p)
{
std::cout<<p->coef<<' '<<p->index<<' ';
p=p->next;
}
std::cout<<std::endl;
std::cout<<l4size<<' ';
p =l4;
while(p)
{
std::cout<<p->coef<<' '<<p->index<<' ';
p=p->next;
}
return 0;
}

浙公网安备 33010602011771号