惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
N
Netflix TechBlog - Medium
V
Visual Studio Blog
博客园 - Franky
小众软件
小众软件
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Apple Machine Learning Research
Apple Machine Learning Research
博客园 - 三生石上(FineUI控件)
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
宝玉的分享
宝玉的分享
量子位
大猫的无限游戏
大猫的无限游戏
人人都是产品经理
人人都是产品经理
V
V2EX
The Cloudflare Blog
月光博客
月光博客
Last Week in AI
Last Week in AI
雷峰网
雷峰网
WordPress大学
WordPress大学
博客园 - 【当耐特】
博客园 - 聂微东
IT之家
IT之家
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻

Sehnsucht

记一次博客换图床的过程 观《花束般的恋爱》 读《活过》 东京 旅行篇 亲人逝去 我为什么想养鱼 防止AI爬取你的博客 「monthly 」博客重构 游戏全成就 好看的小说 人生的每一步都不会是浪费-2024年终 「weekly」星期五综合征 「weekly」听播客 杂谈 读《美丽新世界》 「weekly」社交媒体 恶性事件 新世界 「weekly」认知觉醒 美丽新世界 follow 「weekly」独立博客9问题 双十一买书 读《惊呆了!原来这就是社会学》 一次聊天与自我建设 2024-09月记 补番《relife》 树状数组简单理解 lvm简单使用 博客自动发布方案 某公众号废案 fail2ban基本使用 Podman 环境使用 Nginx Proxy Manager 最佳实践 2024-07同学聚会 vps使用podman部署freshrss Gitlab CICD 实践,思考与记录 装备升级:新的PC gitlab局域网搭建流程
链表应用之多项式相加
2020-04-03 · via Sehnsucht

题目来源:Wejudge#3988

题目

首先输入2个整数m和n(0<m, n<=1000000000)分别代表2个多项式的项数。

然后,输入m+n行数据,前m行表示第一个多项式,后n行表示第二个多项式

每行1个整数c和一个非负整数e(e>=0),分别表示多项式每一项的系数和指数(指数按升序排列)。

样例

输入

3 4 1 1 2 3 3 5 1 0 -6 1 1 2 -3 5

输出

x+2x^3+3x^5 1-6x+x^2-3x^5 1-5x+x^2+2x^3

代码

#include<stdio.h>
#include<stdlib.h>

typedef struct LNode{
    int   coef,index;       //数据域
    struct LNode  *next;   //指针域
}LNode,*LinkList;   

void create(LinkList &ll,int n);
void add(LinkList l1,LinkList l2,LinkList &L);
void print(LinkList L);

int main(){
	int n,m;
	while(~scanf("%d %d", &n , &m)){
		LinkList l1,l2,l3;
		create(l1, n);
		create(l2, m);
		add(l1,l2,l3);
		print(l1);
		print(l2);
		print(l3);
	}
	return 0;
}

void create(LinkList &ll,int n)
{
	ll=new LNode;
	LNode *l=ll;
	int a,b;
	while(n--)
	{
		scanf("%d %d",&a,&b);
		if(a==0)continue;
		l->next=new LNode;
		l=l->next;
		l->coef=a,l->index=b;
		l->next=NULL;
	}
}
void add(LinkList l1,LinkList l2,LinkList &L)
{
	int cc=0;
	L=new LNode;
	LNode *p=L;
	l1=l1->next,l2=l2->next;
	while(l1&&l2){
		p->next=new LNode;
		if(l1->index<l2->index){//指数比较,小的先进行 ,l1小 
			p->next->coef=l1->coef;
			p->next->index=l1->index;
			l1=l1->next;
		} else if(l1->index==l2->index){//指数相同的相加 
			int u=l1->coef+l2->coef;
			if(u==0){//为0 
				p->next->coef=0;
				p->next->index=0;
			}else{//不为0 
				p->next->coef=u;
				p->next->index=l1->index;
			}
			l1=l1->next;
			l2=l2->next;
		}else{//l2小 
			p->next->coef=l2->coef;
			p->next->index=l2->index;
			l2=l2->next;
		}
		p=p->next;
	}
	while(l1){
		p->coef=l1->coef;
		p->index=l1->index;
		l1=l1->next;
		p->next=new LNode;
		p=p->next;
	}
	while(l2){
		p->coef=l2->coef;
		p->index=l2->index;
		l2=l2->next;
		p->next=new LNode;
		p=p->next;
	}
	p->next=NULL;
}
void print(LinkList L)
{
	int kk=0;
	while(L->next!=NULL){
		kk++;
		L=L->next;
		if(kk==1){//第一个数 
				if(L->coef==0){//a=0
					continue;
				}else if(L->coef==1){//a=1      剩下都有b是0  1  其他的情况 
					if(L->index==0){
						printf("%d",L->coef);//就是1 
					}else if(L->index==1){
						printf("x");
					}else{
						printf("x^%d",L->index);
					}
				}else{//a是其他情况 
					if(L->index==0){
						printf("%d",L->coef);
					}else if(L->index==1){
						printf("%dx",L->coef);
					}else{
						printf("%dx^%d",L->coef,L->index);
					}
				}
		} else{//不是第一个 
		
				if(L->coef>=0){//正数和0 
					if(L->coef==0){//a=0
						continue;
					}else if(L->coef==1){//a=1      剩下都有b是0  1  其他的情况 
						if(L->index==0){
							printf("+%d",L->coef);//就是1 
						}else if(L->index==1){
							printf("+x");
						}else{
							printf("+x^%d",L->index);
						}
					}else{//a是其他情况 
						if(L->index==0){
							printf("+%d",L->coef);
						}else if(L->index==1){
							printf("+%dx",L->coef);
						}else{
							printf("+%dx^%d",L->coef,L->index);
						}
					}
				}else{
					{ 
						if(L->index==0){
							printf("%d",L->coef);
						}else if(L->index==1){
							printf("%dx",L->coef);
						}else{
							printf("%dx^%d",L->coef,L->index);
						}
					}
				}
		}
	}
	printf("\n");
}