两题都属于模拟多项式计算过程,且数据不大,都可以直接暴力
1009
给定两个多项式 AA 和 BB,计算 A×B的结果。
共两行,每行包含一个多项式的信息,格式如下:
K N1 aN1 N2 aN2 … NK aNK
其中,K 表示多项式中非零项的数量,Ni和 aNi分别表示其中一个非零项的指数和系数。
结果中的各项的系数均保留一位小数。
#include<bits/stdc++.h>
#define rep(i,a,n) for(int i=a;i<n;i++)
using namespace std;
struct node {
int k;
double s[2005];
}a,b,c;
int x;
double y;
int main(){
cin>>a.k;
rep(i,0,a.k){
cin>>x>>y;
a.s[x] = y;
}
cin>>b.k;
rep(i,0,b.k){
cin>>x>>y;
b.s[x] = y;
}
rep(i,0,2001)
if(a.s[i]){
rep(j,0,2001)
if(b.s[j]){
x = i+j;
y = a.s[i] * b.s[j];
c.s[x] += y;
}
}
int ans = 0;
rep(i,0,2001)
if(c.s[i])
ans++;
printf("%d",ans);
for(int i=2000;i>=0;i--)
if(c.s[i])
printf(" %d %.1lf",i,c.s[i]);
printf("\n");
}
PAT 1002
#include<bits/stdc++.h>
#define rep(i,a,n) for(int i=a;i<n;i++)
using namespace std;
int n1[1005],n2[1005];
double a1[1005],a2[1005];
int k1,k2;
int x;
double y;
int main(){
cin>>k1;
int mx = -1;
rep(i,0,k1){
cin>>x>>y;
a1[x] = y;
mx = max(mx,x);
}
cin>>k2;
rep(i,0,k2){
cin>>x>>y;
a1[x] += y;
mx = max(mx,x);
}
int cnt = 0;
rep(i,0,mx+1)
if(a1[i])
cnt++;
printf("%d",cnt);
for(int i = mx; i >=0;i--)
if(a1[i]) printf(" %d %.1lf",i,a1[i]);
printf("\n");
}