PAT 解题报告 1009. Product of Polynomials (25)
This time, you are supposed to find A*B where A and B are two polynomials.
Input Specification:
Each input file contains one test case. Each case occupies 2 lines, and each line contains the information of a polynomial: K N1 aN1 N2 aN2 ... NK aNK, where K is the number of nonzero terms in the polynomial, Ni and aNi (i=1, 2, ..., K) are the exponents and coefficients, respectively. It is given that 1 <= K <= 10, 0 <= NK < ... < N2 < N1 <=1000.
Output Specification:
For each test case you should output the product of A and B in one line, with the same format as the input. Notice that there must be NO extra space at the end of each line. Please be accurate up to 1 decimal place.
Sample Input
2 1 2.4 0 3.2
2 2 1.5 1 0.5
Sample Output
3 3 3.6 2 6.0 1 1.6
题目描述:
给定两个多项式的系数和指数, 算着两个多项式的乘积.
算法分析:
思路1:map保存项
用map保存项,计算结果需要剔除map项值==0的项。
思路2:hash保存项
注意点:
用map保存项,结果需要剔除map项值==0的项。
map
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <map> using namespace std; int main()
{
int K, L;
map<int,double> m1,m2,mp;
scanf("%d", &K);
for (int i=; i<K; i++){
int e;double c;
scanf("%d%lf", &e, &c);
m1[e] = c;
}
scanf("%d", &L);
for (int i=; i<L; i++) {
int e;double c;
scanf("%d%lf", &e, &c);
m2[e] = c;
} map<int,double>::iterator it1,it2,it;
for (it1=m1.begin(); it1!=m1.end(); it1++) {
for (it2=m2.begin(); it2!=m2.end(); it2++) {
int key = it1->first + it2->first;
double value = it1->second * it2->second;
it = mp.find(key);
if (it == mp.end()) {
mp[key] = value;
}
else {
it->second += value;
}
}
}
for(it=mp.begin(); it!=mp.end();) {
if (it->second == 0.0) {
mp.erase(it++);
}
else it++;
}
printf("%d", mp.size());
map<int,double>::reverse_iterator rit;
for (rit=mp.rbegin(); rit!=mp.rend(); rit++) {
printf(" %d %.1lf", rit->first, rit->second);
}
return ;
}
hash
#include<cstdio>
#include<cstring> #define MAXN 2001
double hash[MAXN],hash1[MAXN]; int main(){
freopen("in.txt","r",stdin);
int n1,n2,i,j,k;
double tmp;
//scanf("%d",&n1);
while(scanf("%d",&n1)!=EOF){
memset(hash,,sizeof(hash));
memset(hash1,,sizeof(hash1));
for(i=;i<n1;i++){
scanf("%d%lf",&k,&tmp);
hash1[k]=tmp;
}
scanf("%d",&n2);
for(i=;i<n2;i++){
scanf("%d%lf",&k,&tmp);
for(j=;j>=;j--){
hash[j+k]+=hash1[j]*tmp;
}
}
int count=;
for(i=;i<MAXN;i++){
if(hash[i]!=) count++;
}
if(count==) printf("0\n");
else{
printf("%d",count);
for(i=MAXN-;i>=;i--){
if(hash[i]!=) printf(" %d %.1lf",i,hash[i]);
}
printf("\n");
}
}
return ;
}
PAT 解题报告 1009. Product of Polynomials (25)的更多相关文章
- PAT (Advanced Level) 1009. Product of Polynomials (25)
简单模拟. #include<iostream> #include<cstring> #include<cmath> #include<algorithm&g ...
- 【PAT甲级】1009 Product of Polynomials (25 分)
题意: 给出两个多项式,计算两个多项式的积,并以指数从大到小输出多项式的指数个数,指数和系数. trick: 这道题数据未知,导致测试的时候发现不了问题所在. 用set统计非零项时,通过set.siz ...
- PAT甲 1009. Product of Polynomials (25) 2016-09-09 23:02 96人阅读 评论(0) 收藏
1009. Product of Polynomials (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yu ...
- PAT 甲级 1009 Product of Polynomials (25)(25 分)(坑比较多,a可能很大,a也有可能是负数,回头再看看)
1009 Product of Polynomials (25)(25 分) This time, you are supposed to find A*B where A and B are two ...
- pat 甲级 1009. Product of Polynomials (25)
1009. Product of Polynomials (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yu ...
- PATA 1009. Product of Polynomials (25)
1009. Product of Polynomials (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yu ...
- 1009 Product of Polynomials (25分) 多项式乘法
1009 Product of Polynomials (25分) This time, you are supposed to find A×B where A and B are two po ...
- PAT 1009 Product of Polynomials (25分) 指数做数组下标,系数做值
题目 This time, you are supposed to find A×B where A and B are two polynomials. Input Specification: E ...
- 【PAT】1009. Product of Polynomials (25)
题目链接:http://pat.zju.edu.cn/contests/pat-a-practise/1009 分析:简单题.相乘时指数相加,系数相乘即可,输出时按指数从高到低的顺序.注意点:多项式相 ...
随机推荐
- wordpress 添加自定义菜单到管理面板(wp-admin)
如果你在做 wordpress 主题或插件的开发,通常需要在后台dashboard管理面板添加菜单方便用户做主题设置或插件设置.这篇文章要讨论的问题就是怎么样加这个菜单,加在哪里? 添加顶级菜单项 a ...
- python函数参数
1.位置参数 2.默认参数 指向参数为不可变对象 3.可变参数 **args 一个列表list或是元组tuple 4.关键字参数 **kw,是一个字典dict 5.命名关键字参数 *,
- vue model双向绑定
view <div id='demo' class="container"> <input type="text" v-model='name ...
- Ubuntu Nginx下配置网站ssl实现https访问
最近在看 HTTP权威指南 看到介绍了HTTPS的ssl,自己就动手测试了下,将步骤记录下 HTTPS简介 什么是HTTPS?百科是这样解释的.HTTPS(全称:Hyper Text Trans ...
- 区分总结innerHeight与clientHeight、innerWidth与clientWidth、scrollLeft与pageXOffset等属性
window对象: (1)innerHeight属性:窗口中文档显示区域的高度,不包括菜单栏.工具栏等部分.该属性可读可写. IE不支持该属性,IE中body元素的clientHeight属性与该属性 ...
- OC文件大小的计算方法,多用于清理缓存
OC文件大小的计算方法,一般多用于清理缓存.下载.统计 可以使用以下方法: #pragma mark Bt转换 + (NSString *)axcFileSizeWithToString:(unsig ...
- Java迭代 : Iterator和Iterable接口
从英文意思去理解 Iterable :故名思议,实现了这个接口的集合对象支持迭代,是可迭代的.able结尾的表示 能...样,可以做.... Iterator: 在英语中or 结尾是都是表示 .. ...
- Qt窗体内控件自适应调整大小
http://stackoverflow.com/questions/3492739/auto-expanding-layout-with-qt-designer After creating you ...
- XCODE打包安装包步骤
1. 2. 3. 4. 5. 6. 7. 导出之后就可以看到一个后缀为.ipa 的安装包.
- Linux下对各种压缩文件处理
Linux下最常用的打包程序就是tar了,使用tar程序打出来的包我们常称为tar包,tar包文件的命令通常都是以.tar结尾的.生成tar包后,就可以用其它的程序来进 行压缩了,所以首先就来讲讲ta ...