一元多項式求和
阿新 • • 發佈:2021-01-10
技術標籤:演算法
提示:文章寫完後,目錄可以自動生成,如何生成可參考右邊的幫助文件
文章目錄
題目要求
已知一元多項式: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;
}