题目
- 标题: 一元稀疏多项式计算器
- 类别: 综合 时间限制 2S 内存限制 1000Kb
- 问题描述 一元 n 次多项式𝑝0𝑋𝑒0 + 𝑝1𝑋𝑒1 + ⋯ + 𝑝𝑖𝑋𝑒𝑖 + ⋯ + 𝑝𝑛𝑋𝑒𝑛 项数较少时成为一元稀疏多项式,
- 例如:3 + 6𝑋3 − 2𝑋8 + 12𝑋20是一个一元稀疏多项式。
- 设计一个一元稀疏多项式计算器程 序完成两个一元稀疏多项式的加减法,输出结果多项式的各项系数和指数。 输入说明 输入数据第 1 行为 3 个正整数 n,m,t。
- 其中 n 表示第一个多项式的项数,m 表示第二个 多项式的项数,t 表示运算类型,0 为加法,1 为减法。
- 数据的第 2 行包含 2n 个整数,每两 个整数分别表示第一个多项式每一项的系数和指数;第 3 行包含 2m 个整数,每两个整数分 别表示第二个多项式每一项的系数和指数。
- 两个多项式的每项是按照指数递增的形式给出的,
- 例如对于多项式3 + 6𝑋3 − 2𝑋8 + 12𝑋20,对应的输入为 3 0 6 3 -2 8 12 20
- 输出说明 运算结果按指数从低到高的顺序在以多项式形式(见输出样例)输出结果,注意系数为负数 时输出减号,系数为 0 时不输出该项,指数为 1 时不输出指数。
- 输入样例 6 2 0 1 0 1 1 1 2 1 3 1 4 1 5 -1 3 -1 4
- 输出样例 1+x+x^2+x^5
这个题目比较简单,可以看作是指数和系数的映射,难点在于特殊情况的输出格式需要分类,建议先在草稿上列出全部情况再进行编程,(本来想参考一下别人的代码,但大佬们都写的好长,无奈只能自己想了qwq)注意指数可能为负数,所以在这里用map进行映射而不选用数组,其他都标注在代码里了
#include<bits/stdc++.h>
using namespace std;
map<int,int>arr;//指数可能为负数,用map
int main(){
int n,m,t,i=0,a,b,max=0,min=10000000;
cin>>n>>m>>t;
while(n--){
cin>>a>>b;
if(b>max)max=b;//寻找最大指数项
if(b<min)min=b;//寻找最小指数项
arr[b]=a;
}
while(m--){
cin>>a>>b;
if(b>max)max=b;
if(b<min)min=b;
if(t==0) arr[b]+=a;
else arr[b]-=a;
}
for(i=min;i<=max;i++){
if(arr[i]!=0){
if(i==0)cout<<arr[i];//指数为0
else if(i==1&&arr[i]!=1&&arr[i]!=-1)cout<<arr[i]<<"x";//指数为1,系数不为1
else if(i==1&&arr[i]==1)cout<<"x";
else if(i==1&&arr[i]==-1)cout<<"-x";//指数为1
else if(arr[i]==1)cout<<"x^"<<i;
else if(arr[i]==-1)cout<<"-x^"<<i;//系数为正负1
else cout<<arr[i]<<"x^"<<i;
}
if(i==0){
if(arr[i]==0);
else if(arr[i+1]>0)cout<<"+";
}
else if(arr[i+1]>0)cout<<"+";//输出格式
}
return 0;
}