浙江大学PAT上机题解析之3-04. 一元多项式的乘法与加法运算
设计函数分别求两个一元多项式的乘积与和。
输入格式说明:
输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。
输出格式说明:
输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。
样例输入与输出:
| 序号 | 输入 | 输出 |
| 1 |
4 3 4 -5 2 6 1 -2 0 |
15 24 -25 22 30 21 -10 20 -21 8 35 6 -33 5 14 4 -15 3 18 2 -6 1 |
| 2 |
2 1 2 1 0 |
1 4 -1 0 |
| 3 |
2 -1000 1000 1000 0 |
-1000000 2000 2000000 1000 -1000000 0 |
| 4 |
0 |
0 0 |
#include <iostream>
#include <algorithm>
#include <vector> using namespace std; typedef struct Term{
int coe;//系数
int exp;//指数
}Term; bool compare(Term a,Term b)
{
return a.exp>b.exp;
} /*
Term Mul(Term a,Term b)
{
a.coe = a.coe*b.coe;
a.exp = a.exp+b.exp;
return a;
}
*/ /*
Term Add(Term a,Term b)
{
a.coe +=b.coe;
return a;
}*/
void print(Term a)
{
cout<<a.coe<<" "<<a.exp<<" ";
}
int main()
{ vector<Term> vec1;
vector<Term> vec2;
vector<Term> vec;
vector<Term>::iterator it1,it2; int N1,N2;
int coe,exp;
bool flag = false;
Term t;
cin>>N1;
while(N1--)
{
cin>>coe>>exp;
t.coe = coe;
t.exp = exp;
vec1.push_back(t);
}
//for_each(vec1.begin(),vec1.end(),print);
//system("pause"); cin>>N2;
while(N2--)
{
cin>>coe>>exp;
t.coe = coe;
t.exp = exp;
vec2.push_back(t);
} //for_each(vec2.begin(),vec2.end(),print);
//system("pause"); for (it1=vec1.begin();it1!=vec1.end();it1++)
for (it2=vec2.begin();it2!=vec2.end();it2++)
{
t.coe = it1->coe * it2->coe;
t.exp = it1->exp + it2->exp;
if (t.coe!=0)
vec.push_back(t); } sort(vec.begin(),vec.end(),compare); for (it1 = vec.begin();it1!=vec.end();it1=it2)
{
for (it2 = it1+1;it2!=vec.end() &&it1->exp==it2->exp;it2++)
it1->coe += it2->coe;
if (it1->coe!=0)
{
if (flag)
cout<<" ";
else
flag = true;
cout<<it1->coe<<" "<<it1->exp;
}
}
if (vec1.size()==0)
{
cout<<"0 0";
}
cout<<endl;
flag = false; for (it1=vec1.begin(),it2=vec2.begin();it1!=vec1.end()&&it2!=vec2.end();)
{
if (it1->exp >it2->exp)
{
if (flag)
cout<<" ";
else
flag = true;
cout<<it1->coe<<" "<<it1->exp;
it1++;
}
else if (it1->exp < it2->exp)
{
if (flag)
cout<<" ";
else
flag = true;
cout<<it2->coe<<" "<<it2->exp;
it2++;
}
else
{ if ((it1->coe+it2->coe))
{
if (flag)
cout<<" ";
else
flag = true;
cout<<it1->coe+it2->coe<<" "<<it1->exp;
} it1++;
it2++;
}
} if (it1==vec1.end())
{
while(it2!=vec2.end())
{
if (flag)
cout<<" ";
else
flag = true;
cout<<it2->coe<<" "<<it2->exp;
it2++;
}
} if (it2==vec2.end())
{
while(it1!=vec1.end())
{
if (flag)
cout<<" ";
else
flag = true;
cout<<it1->coe<<" "<<it1->exp;
it1++;
}
} if (flag==false)
cout<<"0 0";
cout<<endl; //for_each(vec.begin(),vec.end(),print); //system("pause");
return 0;
}
//题目不难,注意细节即可
浙江大学PAT上机题解析之3-04. 一元多项式的乘法与加法运算的更多相关文章
- 浙江大学PAT上机题解析之1014. 福尔摩斯的约会 (20)
1014. 福尔摩斯的约会 (20) 时间限制 50 ms 内存限制 32000 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Y ...
- 浙江大学PAT上机题解析之1015. 德才论 (25)
宋代史学家司马光在<资治通鉴>中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人.凡取人之术,苟不得圣人,君子而与之,与其得小人,不若得愚人 ...
- 浙江大学PAT上机题解析之5-05. QQ帐户的申请与登陆
实现QQ新帐户申请和老帐户登陆的简化版功能.最大挑战是:据说现在的QQ号码已经有10位数了. 输入格式说明: 输入首先给出一个正整数N(<=105),随后给出N行指令.每行指令的格式为:“命令符 ...
- 浙江大学PAT上机题解析之3-05. 求链式线性表的倒数第K项
给定一系列正整数,请设计一个尽可能高效的算法,查找倒数第K个位置上的数字. 输入格式说明: 输入首先给出一个正整数K,随后是若干正整数,最后以一个负整数表示结尾(该负数不算在序列内,不要处理). 输出 ...
- 浙江大学PAT上机题解析之2-11. 两个有序链表序列的合并
已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的并集新非降序链表S3. 输入格式说明: 输入分2行,分别在每行给出由若干个正整数构成的非降序序列,用-1表示序列的结尾(-1不属于这个序列) ...
- 浙江大学PAT上机题解析之2-06. 数列求和
给定某数字A(1<=A<=9)以及非负整数N(0<=N<=100000),求数列之和S = A + AA + AAA + … + AA…A(N个A).例如A=1, N=3时,S ...
- PAT 02-线性结构2 一元多项式的乘法与加法运算 (20分)
设计函数分别求两个一元多项式的乘积与和. 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. ...
- PAT甲题题解-1023. Have Fun with Numbers (20)-大数加法
和1024一样都是大数据的题,因为位数最多要20位,long long最多19位给一个num,求sum=num+num问sum包含的数字,是否是num的一个排列,即数字都一样,只是顺序不同罢了. #i ...
- PAT上机注意事项
PAT上机注意事项 这次上机PAT遇到了很多问题,进行一下总结 1.进入考场后,检查机器是否完好,尤其是键盘的键是否失灵,以及是否有打开的页面(考试开始,打开页面都算违规) 2.关于选择IDE 部分考 ...
随机推荐
- hdu 4372 第一类stirling数的应用/。。。好题
/** 大意: 给定一系列楼房,都在一条水平线上,高度从1到n,从左侧看能看到f个, 从右侧看,能看到b个,问有多少种这样的序列.. 思路: 因为肯定能看到最高的,,那我们先假定最高的楼房位置确定,那 ...
- 软件源(Software Sources)
写在前面:浏览了很多国内外的网站,看了很多关于软件源(Software Sources)设置的文章,发现有很多文章中对软件源的设置存在误解,为了让新人能顺利进入Ubuntu的大家庭,特地作此文,详细地 ...
- border-radius.htc为ie6-8实现圆角
~~圆角是比较常用的css3属性,但是ie6-8并不支持圆角,可用border-radius.htc html组件实现圆角, border-radius.htc内部应用vml进行了重绘 border ...
- elk 索引
zjtest7-redis:/usr/local/logstash-2.3.4/config# cat logstash_agent.conf input { file { type => &q ...
- Ubuntu 13.04 安装使用clang
其实很简单,就是用命令即可: apt-get install clang-3.2 clang-3.2-doc 主要说明一点,/usr/bin/c++链接原来指向g++,现在被改变了. $ ls /us ...
- Dalvik虚拟机的优化机制
Dalvik虚拟机设计作为Android系统定制虚拟机, 在移动设备上运行,必须要比普通的Java虚拟机有更多的优化手段和机制, 以下就列举出其中主要的一些优化机制: 1. 使用dex格式的类文件,可 ...
- c++,static 静态成员变量 / 静态成员函数
静态成员变量: //静态成员变量(static) // //1.如果想在同类的多个对象之间实现数据共享 ,可以用静态 //成员变量,即用static修饰的成员变量,例 static int a; // ...
- BZOJ 1738: [Usaco2005 mar]Ombrophobic Bovines 发抖的牛( floyd + 二分答案 + 最大流 )
一道水题WA了这么多次真是.... 统考终于完 ( 挂 ) 了...可以好好写题了... 先floyd跑出各个点的最短路 , 然后二分答案 m , 再建图. 每个 farm 拆成一个 cow 点和一个 ...
- Mirantis OpenStack HA
Mysql使用Galera做Active/Active集群,同时使用Pacemaker,因为Galera mysql用到了领导机选举机制quorum,所以控制节点至少三个 RabbitMQ使用mirr ...
- CentOS 6.5上安装MySQL-Cluster
参考博文: CentOS 6.2下MySQL Cluster 7.2 配置数据库集群 CentOS 6.5上安装MySQL-Cluster 7.3.4过程笔记--下一步学习 MySQL Cluster ...