This time, you are supposed to find A+B where A and B are two polynomials.

这一次,你被要求计算A+B当A和B是两个多项式的时候。

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 Input

2 1 2.4 0 3.2
2 2 1.5 1 0.5

Sample Output

3 2 1.5 1 2.9 0 3.2
 
总结一下有几点,第一点题目意思需要读懂的同时注意题目的一些细节,比如需要保留小数。
这道题目在想的时候,其实需要一点考虑的是数据结构。
用什么样的数据结构去存会比较合理。
下面是我的思考过程,一开始我就想到的时候就觉得数组是最快的,存放固定的常数位置对应的指数,然后对应的相加。
看一下数据大小,1000,那么开1000大小的数组,然后最多数据是10+10个。也就是说,数组中会有很大一部分的空余。
确实很浪费空间。然后我在想不浪费的话就是线性表了,也就是链表,链表插入是没有问题的,主要的问题是查询,查询到相应的位置,然后加数据,或者插入数据,这样的话因为最多是20个数据,就算不用二分查询,最坏复杂度也能在N!
也就是(1+20)*20/2=210左右,比1000的数组循环一边要快。
 
这是对于数据结构的想法,但是具体的题目来说,做题讲究一些代码的复杂程度,用数组实现比较方便,所以我依旧选择使用数组完成。
下面是能过的代码。
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<string.h> using namespace std; float maps[]; int main()
{
int n,x;
float y;
int aN=;
cin>>n;
while (n--)
{
cin>>x>>y;
maps[x] = y;
aN++;
}
cin>>n;
while (n--)
{
cin>>x>>y;
if(maps[x] == )
aN++;
maps[x] += y;
if(maps[x] == )
aN--;
}
if(aN == )
{
cout<<aN;
return ;
}
else
{
cout<<aN<<" ";
}
for (int i = ; i >= ; i--)
{
if(aN == && maps[i] != )
{
printf("%d %.1f",i,maps[i]);
break;
}
else if(maps[i] != )
{
printf("%d %.1f ",i,maps[i]);
aN--;
}
}
return ;
}

然后提一些需要改进的地方。

输出的时候可以使用前缀空格输出。前面直接输出一个相数aN就行了,不用加空格。

printf(" %d %.1f",i,maps[i]);

这样可以减少判断最后输出格式的问题。

其中还要注意的是,多项式加法之后会出现0

所以会出现相数减少的情况,如果合并了,那么相数需要减少,这里我也错过,导致WA。

最新文章

  1. 第一个Mac shell 小脚本
  2. git clone时,报403错误,完美解决方案
  3. Loadrunner进行接口自动化测试
  4. 微软公有云Windows Azure 2014-03-26 国内正式商用
  5. 开通了cnblogs
  6. .NET技术+25台服务器怎样支撑世界第54大网站(转)
  7. Hive技术文档
  8. C++学习笔记(二):基本数据类型
  9. iOS开发网络篇—多线程断点下载
  10. bootstrap之DumpWindowHierarchy
  11. 用 Hexo + Github 搭建自己的博客
  12. MongoDB基本shell操作
  13. 201521123040《Java程序设计》第14周学习总结
  14. 深入理解计算机系统_3e 第八章家庭作业 CS:APP3e chapter 8 homework
  15. python基础——内置函数
  16. Mint-UI组件 MessageBox为prompt 添加判断条件
  17. Django 应用程序 + 模型 + 基本数据访问
  18. PubMed数据下载
  19. win10环境下Android studio安装教程----亲测可用
  20. beta阶段测试基本概况对应机型硬件信息

热门文章

  1. linux nfs开启
  2. iOS中的项目新特性页面的处理
  3. 浅谈 zookeeper 原理,安装和配置
  4. LR错误整理
  5. myBatIs.Net 调用Oracle 存储过程返回游标
  6. VirtualBox 不能为虚拟电脑打开一个新的任务 可能的解决方案
  7. 能加载文件或程序集“XXX”或它的某一个依赖项,系统找不到指定的文件
  8. Opencv2系列学习笔记10(提取连通区域轮廓) 另一个
  9. LeetCode OJ 118. Pascal&#39;s Triangle
  10. Number-guessing Game