一元多项式求和

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


题目要求

已知一元多项式:A(x)=a0+a1x+a2x2+a3x3+….anxn, B(x)= b0+b1x+b2x2+b3x3+….bmxm设计算法实现C(x)=A
(x)+B(x)。功能包括输入多项式A,输入多项式B,求A和B的和,显示求和后的结果等操作。本题中,链表的第
一个元素位置为1,链表的数据域包含coef和exp,其中coef为系数,exp为指数。
各个命令以及相关数据的输入格式如下:
输入多项式A:A,接下来的n行是要输入的多项式,每一行数据有两个值,
第一个值代表系数,第二个值代表指数,当第一个值为0时,多项式A输入结束
输入多项式B:B,接下来的n行是要输入的多项式,每一行数据有两个值,
第一个值代表系数,第二个值代表指数,当第一个值为0时,多项式B输入结束
求多项式A和B的和:任意键;
当输入的命令为E时,程序结束。


代码

代码如下:

#include<iostream>
using namespace std;

class elem
{
    
    
public:
	elem(int m,int n)
	{
    
    
		coef=m;			
		exp=n;			 
	}
	int coef;
	int exp;
	elem*next;			 
};

class Elem
{
    
    
public:
	Elem();					
	~Elem()					 
	{
    
    
		elem*q=NULL;
		elem*p=first;
		while(p!=NULL)
		{
    
    
			q=p;
			p=p->next;
			delete q;
		}
	}
	elem*first;				 
};

Elem::Elem()
{
    
    
	first=new elem(0,0);	
	elem*r=first;			
	int m;
	int n;
	cin>>m>>n; 				 
	while(m!=0)				
	{
    
    
		elem*s=new elem(m,n);
		r->next=s;
		r=s;				 
		cin>>m>>n;
	}
	r->next=NULL;
}

void mix(Elem&A,Elem&B)
{
    
    
    elem *a = A.first, *b = B.first;		 
    while(a && b)
    {
    
    
        if(a->exp < b->exp)					 
        {
    
    
            cout<<a->coef<<" "<<a->exp<<endl;
            a = a->next;
        }
        else if(a->exp > b->exp)			 
        {
    
    
            cout<<b->coef<<" "<<b->exp<<endl;
            b = b->next;
        }
        else								 
		{
    
    
            int tmp = a->coef + b->coef;
            if(tmp)
                cout<<tmp<<" "<<a->exp<<endl;
            a = a->next;
            b = b->next;
        }
    }
}

int main()
{
    
    
	char c;
	cin>>c;
	Elem A;
	cin>>c;
	Elem B;
	cin>>c;
	mix(A,B);
	cin>>c;
	return 0;
}

codeforces题目链接:

https://codeforces.com/problemset/problem/978/F
题解:

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
 
const int maxn=2e5+10;
 
int ans[maxn];
 
struct node{
    
    
    int id,val;
    node(){
    
    }
    node(int _val){
    
    
        val=_val;
    }
    bool operator<(const node& b)const{
    
    
        return val<b.val;
    }
}p[maxn];

int main()
{
    
    
   int n,k;
   scanf("%d %d",&n,&k);
   for(int i=1;i<=n;i++){
    
    
    scanf("%d",&p[i].val);
     p[i].id=i;
   }
 
   for(int i=1;i<=k;i++){
    
    
      int u,v;
      scanf("%d %d",&u,&v);
      if(p[u].val>p[v].val)
        ans[u]--;
      if(p[v].val>p[u].val)
        ans[v]--;
   }
   sort(p+1,p+n+1);
   for(int i=1;i<=n;i++){
    
    
     int pos=lower_bound(p+1,p+n+1,node(p[i].val))-p;
     ans[p[i].id]+=pos-1;
   }
   for(int i=1;i<=n;i++){
    
    
    if(i==1)printf("%d",ans[i]);
    else printf(" %d",ans[i]);
   }
   printf("\n");
   return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_51538002/article/details/112387026