用两个结构体数组存下A和B,A+B的和存在结构体数组C中。
但是第二个测试点一直不通过 ,错误原因是34行else if 写成了 if (>﹏<)
#include<iostream>
#include<vector>
using namespace std;
struct PNode{
int ex;
float co;
};
//结点相加或复制一个结点
PNode PAdd(PNode A, PNode B){
PNode C;
C.co = A.co + B.co;
C.ex = A.ex;
return C;
}
PNode PAdd(PNode A){
PNode C;
C.co = A.co;
C.ex = A.ex;
return C;
}
//多项式相加得到一个多项式
vector<PNode> Add(vector<PNode>A, vector<PNode>B){
vector<PNode>C;
int i = 0; int j = 0;
while (i < A.size() && j < B.size()){
PNode tmp;
if (A[i].ex > B[j].ex){
tmp = PAdd(A[i++]);
C.push_back(tmp);
}
if (A[i].ex < B[j].ex){
tmp = PAdd(B[j++]);
C.push_back(tmp);
}
else{
tmp = PAdd(A[i++], B[j++]);
if (tmp.co != 0)C.push_back(tmp);
}
}
while (i < A.size()){
PNode tmp = PAdd(A[i++]);
C.push_back(tmp);
}
while (j < B.size()){
PNode tmp = PAdd(B[j++]);
C.push_back(tmp);
}
return C;
}
//打印函数
void print(vector<PNode>C){
printf("%d", C.size());
for (int i = 0; i < C.size(); i++){
printf(" %d %.1f", C[i].ex, C[i].co);
}
}
int main(){
int K; int e; float c;
vector<PNode>A, B;
cin >> K;
for (int i = 0; i < K; i++){
PNode tmp;
cin >> e >> c;
tmp.co = c;
tmp.ex = e;
A.push_back(tmp);
}
cin >> K;
for (int i = 0; i < K; i++){
PNode tmp;
cin >> e >> c;
tmp.co = c;
tmp.ex = e;
B.push_back(tmp);
}
vector<PNode>C = Add(A, B);
print(C);
return 0;
}