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)的更多相关文章

  1. PAT (Advanced Level) 1009. Product of Polynomials (25)

    简单模拟. #include<iostream> #include<cstring> #include<cmath> #include<algorithm&g ...

  2. 【PAT甲级】1009 Product of Polynomials (25 分)

    题意: 给出两个多项式,计算两个多项式的积,并以指数从大到小输出多项式的指数个数,指数和系数. trick: 这道题数据未知,导致测试的时候发现不了问题所在. 用set统计非零项时,通过set.siz ...

  3. 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 ...

  4. 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 ...

  5. pat 甲级 1009. Product of Polynomials (25)

    1009. Product of Polynomials (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yu ...

  6. PATA 1009. Product of Polynomials (25)

    1009. Product of Polynomials (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yu ...

  7. 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 ...

  8. 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 ...

  9. 【PAT】1009. Product of Polynomials (25)

    题目链接:http://pat.zju.edu.cn/contests/pat-a-practise/1009 分析:简单题.相乘时指数相加,系数相乘即可,输出时按指数从高到低的顺序.注意点:多项式相 ...

随机推荐

  1. 使用 PHP 限制下载速度

    使用 PHP 限制下载速度 [来源] 达内    [编辑] 达内   [时间]2012-12-12 经常遇到一个问题,那就是有人再办公室下载东西,影响大家上网.办公.同样的问题,要是出现在了服务器上面 ...

  2. db link的查看创建与删除(转)

    1.查看dblink select owner,object_name from dba_objects where object_type='DATABASE LINK'; 或者 select * ...

  3. Web Storage事件无法触发

    不管是在同源其他页面还是在本页面都不能触发storage事件. <!DOCTYPE html> <html> <head> <meta charset=&qu ...

  4. yaf性能测试(wamp环境)

    1实现mvc 出现helloword,成功 2.controller重定向 $get = $this->getRequest()->getQuery("get", &q ...

  5. C code 字符串与整数的相互转化

    #include<stdio.h> int str_to_int(const char *str,int *num); void int_to_str(char str[],const i ...

  6. WIN 8.1使用常见问题及解决

      WIN 8.1正式版64位(cn_windows_8_1_pro_vl_x64_dvd_2971907)使用问题及解决 一.IE11的输入框会变蓝: 如在百度中搜索时,搜索框和按钮均变成蓝色背景, ...

  7. QDir路径的测试与创建-QT

    #include <QCoreApplication> #include <QDir> #include<QtDebug > #include<QFileIn ...

  8. 内存分配、C++变量的生命周期和作用域

    1.内存分配 程序的内存分配有以下几个区域:堆区.栈区.全局区.程序代码区,另外还有文字常量区. 栈区 ——存放局部变量,即由auto修饰的变量,一般auto省略.由编译器自动分配释放.局部变量定义在 ...

  9. [LeetCode]题解(python):081 - Search in Rotated Sorted Array II

    题目来源 https://leetcode.com/problems/search-in-rotated-sorted-array-ii/ Follow up for "Search in ...

  10. Group GridView:用于.Net的分组显示的GridView

    我的项目需要一个可以分组显示的GridView,我不会写,上网找了一圈,最终在国外的网站上找到的这个,比较符合我的要求,但它的分页得重写,它写了能分页,但我发现它的分页功能事实上并没有实现,也不知道是 ...