3-04. 一元多项式的乘法与加法运算(20)
2015-07-12 11:19
435 查看
由于题中数据量不是很大 想到 类似“散列 查找”的算法 将指数 映射到一维数组的下标 而数组的值为 系数。
#include<iostream> #include<cstring> #include<vector> using namespace std; #define Size 1000000// 1000*1000 int Poly_1[Size+1], Poly_2[Size+1], Added[Size+1], Mul[Size+1];// added mul 分别存储 加结果 乘结果 后打印 struct Node { int C;//系数 int E;//指数 }; int main() { vector<Node>V; Node num; memset( Poly_1, 0, sizeof( Poly_1) ); memset( Poly_2, 0, sizeof( Poly_2 )); memset( Added, 0, sizeof( Added ) ); memset( Mul, 0, sizeof(Mul) ); int N; cin>>N; for( int i=0; i<N; i++ ){ cin>>num.C>>num.E; Added[num.E]=Poly_1[num.E]=num.C; V.push_back(num); } cin>>N; for( int i=0; i<N; i++ ){ cin>>num.C>>num.E; Poly_2[num.E]=num.C; Added[num.E]+=num.C; for( int i=0; i<V.size(); i++ )// 将每次的输入依次相乘后保存到 Mul 中 Mul[num.E + V[i].E ]+=num.C*V[i].C; } bool flag=true;// 检测 相加 相乘 后的 值是否 为 0 默认 为0 bool first = true; for( int i=Size; i>=0; i-- ) { if( Mul[i]!=0 ){ flag = false; if( first ){ first = false; cout<<Mul[i]<<" "<<i; } else cout<<" "<<Mul[i]<<" "<<i; } } if( flag ) cout<<0<<" "<<0; cout<<endl; flag = true; first = true; for( int i=Size; i>=0; i-- ) { if( Added[i]!=0 ){ flag = false; if( first ){ first = false; cout<<Added[i]<<" "<<i; } else cout<<" "<<Added[i]<<" "<<i; } } if( flag ) cout<<0<<" "<<0; cout<<endl; return 0; }
相关文章推荐
- 函数参数之 传常引用(passed by reference to const)替换 传值(passed by value)
- 【LeetCode】225. Implement Stack using Queues
- javascript性能优化的几点建议
- Get Started——开发前的注意事项
- 实时显示iOS编写UI代码效果
- 关于struts2与spring整合中,scope=“?”的使用,对整个系统的影响
- jade 学习笔记 - gulp 自动编译
- JAVA集合类详解
- LeetCode || Implement Queue using Stacks
- The Unix Tools Are Your Friends
- .net使用FluentValidation进行服务端验证。
- HAL打开驱动失败
- 21-Tomcat不编译项目
- C++11并发之std::mutex
- Ubuntu Coding for Your Friends
- 欢迎使用CSDN-markdown编辑器
- 10003 - Cutting Sticks(DP)
- 类中static并没有那么简单
- iOS UIImageView 圆角
- Two Wrongs Can Make a Right (and Are Difficult to Fix)