甲级Test1002
来源:互联网 发布:淘宝规则关于假货 编辑:程序博客网 时间:2024/05/16 12:14
1002. A+B for Polynomials (25)
This time, you are supposed to find A+B where A and B are two polynomials.
Input
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
For each test case you should output the sum 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 to 1 decimal place.
Sample Input2 1 2.4 0 3.22 2 1.5 1 0.5Sample Output
3 2 1.5 1 2.9 0 3.2
难点分析:
1.相加系数为0的情况。
2.避免打印多余的空格。
3.系数要求输出保留一位小数。
代码(以下代码仅负责实现,暂未考虑优化):
#include <iostream>#include "iomanip"#include<map>using namespace std;int main() { map<int, double> poly1; map<int, double> poly2; map<int, double, greater<int>> poly3;//读入map集合 int n = 0; cin >> n; for (; n > 0; n--) { int e = 0; double p = 0; cin >> e >> p; double temp = poly1[e]+p; poly1[e] = temp; } cin >> n; for (; n > 0; n--) { int e = 0; double p = 0; cin >> e >> p; double temp = poly2[e]+p; poly2[e] = temp; }//做加法 map<int, double>::iterator iterator1 = poly1.begin(); map<int, double>::iterator iterator2 = poly2.begin(); while (iterator1 != poly1.end() && iterator2 != poly2.end()) { int poly1E = iterator1->first; double poly1P = iterator1->second; int poly2E = iterator2->first; double poly2P = iterator2->second; if (poly1E < poly2E) { poly3.insert(map<int, double>::value_type(poly1E, poly1P)); iterator1++; } else if (poly1E > poly2E) { poly3.insert(map<int, double>::value_type(poly2E, poly2P)); iterator2++; } else if (poly1E == poly2E) { if (poly1P + poly2P != 0) { poly3.insert(map<int, double>::value_type(poly2E, poly2P + poly1P)); } iterator1++; iterator2++; } } if (iterator1 == poly1.end()) { while (iterator2 != poly2.end()) { poly3.insert(map<int, double>::value_type(iterator2->first, iterator2->second)); iterator2++; } } else if (iterator2 == poly2.end()) { while (iterator1 != poly1.end()) { poly3.insert(map<int, double>::value_type(iterator1->first, iterator1->second)); iterator1++; } }//输出结果 cout << poly3.size(); cout<<setiosflags(ios::fixed); cout.precision(1); for (map<int, double>::iterator iterator3 = poly3.begin(); iterator3 != poly3.end(); iterator3++) { double a = iterator3->second ; cout << " " << iterator3->first << " " << a; } return 0;}
- 甲级Test1002
- PAT 甲级
- PAT(甲级)1003
- PAT(甲级)1004
- PAT(甲级)1005
- PAT(甲级)1006
- PAT(甲级)1007
- PAT(甲级)1008
- PAT(甲级)1009
- PAT(甲级)1010
- PAT(甲级)1011
- PAT(甲级)1012
- PAT(甲级)1013
- PAT(甲级)1014
- PAT(甲级)1015
- PAT(甲级)1016
- PAT(甲级)1017
- PAT(甲级)1018
- ClassNotFoundException:MappingJacksonHttpMessageConverter
- Android游戏入门 SurfaceView应用----手指发动小球
- 最优装载问题(贪心基础)
- mac tree命令
- mxnet 框架的搭建
- 甲级Test1002
- C#中的socket编程入门实例
- 【广告算法工程师入门 22】机制设计-传统机制设计演变与收入优化思考
- 判断一个单向链表是不是回文链
- LeetCode-Subsets & Subsets II
- redis类型[string 、list 、 set 、sorted set 、hash]
- 命令模式(command)c++版
- 2017.10.16学习
- 二叉树创建与遍历