PAT 甲级 1002 A+B for Polynomials
原题链接
算法标签 模拟 高精度 双指针
代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
struct Num{
int a;
double b;
}num[15], num1[15], num2[30];
// 存储多项式A num[15], 存储多项式B num1[15], 存储多项式A + B num2[30];
bool cmp(Num A,Num B){
if(A.a!=B.a){
return A.a<B.a;
}
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int k,k1;
cin>>k;
for(int i=0;i<k;++i){
cin>>num[i].a>>num[i].b;
}
cin>>k1;
for(int i=0;i<k1;++i){
cin>>num1[i].a>>num1[i].b;
}
sort(num, num+k, cmp);
sort(num1, num1+k1, cmp);
int p=k-1, p1=k1-1;
int cnt=0;
while(1){
if(num[p].a>num1[p1].a){
num2[cnt].a=num[p].a;
num2[cnt].b=num[p].b;
cnt++;
p--;
}
else if(num[p].a<num1[p1].a){
num2[cnt].a=num1[p1].a;
num2[cnt].b=num1[p1].b;
p1--;
cnt++;
}
else if(num[p].a==num1[p1].a){
num2[cnt].a=num1[p1].a;
num2[cnt].b=num[p].b+num1[p1].b;
if(num2[cnt].b){
cnt++;
p--;
p1--;
}
else{
p--;
p1--;
}
}
if(p1==-1||p==-1){
break;
}
}
int pp=p1;
if(p==-1&&p1!=-1){
while(1){
num2[cnt].a=num1[p1].a;
num2[cnt].b=num1[p1].b;
cnt++;
p1--;
if(p1==-1){
break;
}
}
}
if(pp==-1&&p!=-1){
while(1){
num2[cnt].a=num[p].a;
num2[cnt].b=num[p].b;
cnt++;
p--;
if(p==-1){
break;
}
}
}
cout<<cnt;
for(int i=0;i<cnt;++i){
cout<<" "<<setiosflags(ios::fixed)<<setprecision(1)<<num2[i].a<<" "<<setiosflags(ios::fixed)<<setprecision(1)<<num2[i].b;
}
}
原创不易
转载请标明出处
如果对你有所帮助 别忘啦点赞支持哈