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

posted @ 2026-10-12 21:35  Compash  阅读(3)  评论(0)    收藏  举报