一:题目
设计函数分别求两个一元多项式的乘积与和。
输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。
输出格式: 输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0。
输入样例:
4 3 4 -5 2 6 1 -2 0
3 5 20 -7 4 3 1
输出样例:
15 24 -25 22 30 21 -10 20 -21 8 35 6 -33 5 14 4 -15 3 18 2 -6 1
5 20 -4 4 -5 2 9 1 -2 0
二:补充测试用例
测试点2:
2 1 2 1 0
2 1 2 -1 0
测试用力3:
2 -1000 1000 1000 0
2 1000 1000 -1000 0
测试用例4:
0
0 1 2 3
三:思路
思路:用map<int,int>进行 存储数据;在处理乘积的时候 一个系数 对应一个指数, 若指数相同 对系数进行累加 处理多项式和的运算同理
四:上码
#include<bits/stdc++.h>
using namespace std;
int main(){
int N,M;
int arr1[1001],arr2[1001];
std::map<int, int, std::greater<int> > m,m2;
map<int,int>::iterator t;
cin >> N;
for(int i = 0; i < 2 * N; i++){
int nums;
cin >> nums;
arr1[i] = nums;
}
cin >> M;
for(int i = 0; i < 2 * M; i++){
int nums;
cin >> nums;
arr2[i] = nums;
}
for(int i = 0; i < 2 * N - 1; i = i + 2){
for(int j = 0; j < 2 * M - 1; j = j + 2){
int temp1 = arr1[i + 1] + arr2[j + 1];
int temp2 = arr1[i] * arr2[j];
m[temp1] += temp2;
}
}
int flag = 0;
if(N == 0 || M == 0){
cout << "0 0";
}else{
for(t = m.begin(); t != m.end(); t++){
if(flag == 0 && t->second != 0)
cout << t->second << ' ' << t->first;
else if(t->second != 0){
cout << ' ' << t->second << ' ' << t->first;
}
flag = 1;
}
}
cout << endl;
for(int i = 0; i < 2 * N - 1; i = i + 2){
m2[arr1[i+1]] = arr1[i];
}
for(int i = 0; i < 2 * M - 1; i = i + 2){
m2[arr2[i+1]] += arr2[i];
}
int flag1 = 0;
int count = 0;
if(M == 0 && N == 0){
cout << "0 0";
}else{
for(t = m2.begin(); t != m2.end(); t++){
if(flag1 == 0 && t->second != 0)
cout << t->second << ' ' << t->first;
else if(t->second != 0){
cout << ' ' << t->second << ' ' << t->first;
}
flag1 = 1;
if(t->second == 0){
count++;
}
}
}
if(count == m2.size()){
cout << "0 0";
}
}
五:知识速递(如果对于map的用法不了解的兄弟们,可以学一下啊)
map的基本用法
最后加油Boy!!! 刷题源于热爱 , 顺便服务与以后的工作,学到老,刷到老!!!!!!!!!!
|