AcWing 1474. 多项式 A + B
原题链接
简单
作者:
goldstine
,
2021-07-17 14:50:44
,
所有人可见
,
阅读 287
题目描述
方法一:
通过struct模拟 高精度的运算==>可以通过vector、string、struct进行模拟
将每一个整数表示成(a,p) 系数和指数的形式
方法二:
通过计数思想,对每一个指数的系数和进行计数,通过double s[N];通过指数数值构建计数数组
算法1
C++ 代码
#include<iostream>
#include<algorithm>
using namespace std;
const int N=10;
struct number{
int p;
double a;//表示每一项的指数和系数
bool operator <(const number &n) const {
return p>n.p;
}
}b[N],c[N];
int main(){
int k;
cin>>k;
for(int i=0;i<k;i++){
cin>>b[i].p>>b[i].a;
}
int m;
cin>>m;
for(int i=0;i<m;i++){
cin>>c[i].p>>c[i].a;
}
for(int i=0;i<k;i++){
for(int j=0;j<m;j++){
if(b[i].p==c[j].p){
b[i].a=(b[i].a+c[j].a);
c[j].a=0;
break;
}
}
}
int tot=k;
for(int i=0;i<m;i++){
if(c[i].a!=0){
b[tot].p=c[i].p;
b[tot].a=c[i].a;
tot++;
}
}
//按照p从高到低进行输出
sort(b,b+tot);
int cnt=0;
for(int i=0;i<tot;i++){
if(b[i].a!=0){
cnt++;
}
}
cout<<cnt;
for(int i=0;i<tot;i++){
if(b[i].a==0){
continue;
}
printf(" %d %.1f",b[i].p,b[i].a);
}
return 0;
}
算法2
C++ 代码
#include<iostream>
using namespace std;
const int N=1010;
double s[N];//计数
int main(){
int k;
for(int i=0;i<2;i++){
cin>>k;
for(int i=0;i<k;i++){
int p;double a;
cin>>p>>a;
s[p]+=a;
}
}
int tot=0;
for(int i=0;i<=N;i++){
if(s[i]!=0){
tot++;
}
}
cout<<tot;
for(int i=N;i>=0;i--){
if(s[i]!=0){
printf(" %d %.1f",i,s[i]);
}
}
return 0;
}