提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
题目要求
已知一元多项式: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;
}