PAT1002
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。
PAT1002的更多相关文章
- 浙大PAT-1002
1002. 写出这个数 (20) 读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式:每个测试输入包含1个测试用例,即给出自然数n的值.这里保证n小于10100. 输出格式 ...
- PAT1002:A+B for Polynomials
1002. A+B for Polynomials (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue T ...
- PAT1002 写出这个数 (C++实现)
PAT乙级考试题目 1002 写出这个数 (20 分) 题目要求: 读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 ...
- pat1002. A+B for Polynomials (25)
1002. A+B for Polynomials (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue T ...
- PAT 1001-1010 题解
早期部分代码用 Java 实现.由于 PAT 虽然支持各种语言,但只有 C/C++标程来限定时间,许多题目用 Java 读入数据就已经超时,后来转投 C/C++.浏览全部代码:请戳 本文谨代表个人思路 ...
- PAT (Advanced Level) Practice 1001-1005
PAT (Advanced Level) Practice 1001-1005 PAT 计算机程序设计能力考试 甲级 练习题 题库:PTA拼题A官网 背景 这是浙大背景的一个计算机考试 刷刷题练练手 ...
随机推荐
- table可更改th大小的jQuery插件
(function ($) { $.fn.resizetable = function () { var tableObj = $(this); var inResizeRange = false; ...
- 依赖跟踪如何工作的(How dependency tracking works)
这一块主要是理论的讲解,本人刚接触这块不久,就不敢翻译了,请参见园子里其他人的现有文章 http://www.cnblogs.com/TomXu/archive/2011/11/22/2256820. ...
- Android上的远程调试
来源: http://www.seejs.com/archives/296 目录 远程调试概述 使用 Chrome 的 ADB 扩展进行远程调试 1. 安装 ADB 扩展 2. 启用你的移动设备上的 ...
- 基于python的tagcloud
setp1: 安装jieba,pytagcloud pip install jieba apt-get install python-pygame pip install simplejson pip ...
- VBS自编写脚本。(实现批量修改文件名且在执行前,备份原有文件夹中的文件)
'=========================================================================='' VBScript Source File - ...
- hdu_3182_Hamburger Magi(状压DP)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=3182 题意:有n个汉堡,做每个汉堡需要消耗一定的能量,每个汉堡对应一定的价值,且只能做一次,并且做当前 ...
- Android ADT安装时卡在Calculating requirements and dependencies
AndroidSDK及Eclipse安装都很顺利,但是在Eclipse下安装ADT插件时,先采用点击Help->installnew software->Add...,无论输入https: ...
- 如何测试本地是否能够正常访问云服务器的 Web 端口
在windows环境下打开DOS命令行 使用telnet命令.例如 telnet www.baidu.com 80 插播一条小知识:DOS下清屏的命令是cls. 首先很不幸,出现了['telnet' ...
- innerHTML,innerText,outerHTML,outerText,value浅析
首先是一个例子: <div id= "aa">0<br/>0<span>11</span>22</div><inp ...
- POJ 1067 取石子游戏 威佐夫博弈
威佐夫博弈(Wythoff Game):有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜. 我们用(ak,bk)(ak ≤ bk ,k= ...