1. 程式人生 > 其它 >一元多項式求和

一元多項式求和

技術標籤:演算法

提示:文章寫完後,目錄可以自動生成,如何生成可參考右邊的幫助文件

文章目錄


題目要求

已知一元多項式: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;
}