#include<stdio.h>
#include<vector>
using namespace std;
struct pol {
int z;
double x;
};
struct pol num[30];
void quicksort(int left,int right) {
int i, j;
struct pol t,l;
if (left > right)
return;
l = num[left];
i = left;
j = right;
while (i != j) {
while (num[j].z <= num[left].z&&i<j)
j--;
while (num[i].z >= num[left].z&&i<j)
i++;
if (i < j) {
t = num[i];
num[i] = num[j];
num[j] = t;
}
}
num[left]=num[i];
num[i]=l;
quicksort(left, i - 1);
quicksort(i + 1, right);
return;
}
int main(void) {
int i, j, a, k, flag;
double b;
vector<int>z;//指数-a-int-z
vector<double>x;//系数-b-double-x
scanf("%d", &k);
for (i = 1; i <= k; i++) {
scanf("%d%lf", &a,&b);
if (i == 1) {
x.push_back(b);
z.push_back(a);
}
else {
for (j = 0; j < z.size(); j++) {
if (a == z[j]) {
x[j] += b;
flag = 1;
}
}
if (!flag) {
x.push_back(b);
z.push_back(a);
}
}
flag = 0;
}
scanf("%d", &k);
for (i = 1; i <= k; i++) {
scanf("%d%lf",&a,&b);
for (j = 0; j < z.size(); j++) {
if (a == z[j]) {
x[j] += b;
flag = 1;
}
}
if (!flag) {
x.push_back(b);
z.push_back(a);
}
flag = 0;
}
for (i = 0; i < x.size(); i++) {
num[i].z = z[i];
num[i].x = x[i];
}
quicksort(0, x.size()-1);
int sum = x.size();
for (i = 0; i < x.size(); i++)
if (num[i].x == 0)
sum--;
printf("%d", sum);
if (sum != 0)
printf(" ");
for (i = 0; i < x.size(); i++) {
if (num[i].x == 0)
continue;
printf("%d %.1lf", num[i].z, num[i].x);
sum--;
if (sum!= 0)
printf(" ");
}
return 0;
}
1002 A+B for Polynomials
最新推荐文章于 2024-09-09 22:12:12 发布