PAT甲1002. A+B for Polynomials

最近心情

先在这里说点无关紧要的东西吧。其实最近压力挺大的,选了数据挖掘课,每周要看两篇论文,写报告,而自己也是老师实验室的学生;另外,下定决心考浙大,因此也得在复试前准备好初试和机试。说实话,我挺害怕的,害怕自己考不上。但是,人总不能瞻前顾后的,既然下定了决心,就应该努力做好。

其实,加入老师的实验室,一开始是希望能够发论文加分保研,但是现在看来希望是不大的,毕竟我的加分项真的太少了;第二点,我现在更多的是想参加一些项目,特别是大数据以及机器学习这块的,感觉也是自己可以努力的方向。目前我所知道的平台只有天池和Kaggle。当然,还是希望二水马能够带我比赛… 虽然说感觉他应该不是很愿意,哈哈哈。

继续加油好了。话说,因为机试是靠甲级,所以最后还是打算先刷完甲题好了。另外,比赛我还是打算参加的,参加Kaggle的比赛。

题目

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

思路

唉。我也不知道自己是心理原因,还是就是笨,一开始我想的是那种笨方法,就是将数据存进两个数组,然后两个循环不断查找和匹配。后来写了一点开头,就知道是不可行的。昨晚脑子也是很混乱,纠结人生吧。最后也是参考了别人的博客,才意识到可以有那么简单的做法。。。指数是0到1000,完全可以用数组下标来代替(当然,如果有负数就不行了,或许可以用两个数组充当下标),而不像我想的什么要用链表那么麻烦。

先贴出通过代码吧,那么简单的题,我…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>
#include <cstdio>
using namespace std;

// 网上看的思路,用数组下标来当指数,系数做对应的数组值。
//int float注意使用

int main(){
float poly[1001]={0};
int k1; //项数
cin >> k1;
for(int i=0; i<k1; i++){
int x;
float y;
scanf("%d%f", &x, &y);
poly[x] = y;
}
int k2;
cin >> k2;
for(int i=0; i<k2; i++){
int x;
float y;
scanf("%d%f", &x, &y);
poly[x] += y;
}
int k = 0;
for(int i=0; i<=1000; i++){
if(poly[i] != 0) k++;
}
// printf("%d ", k);
printf("%d", k);
int cnt = 1;
for(int i=1000; i>=0; i--){
if(poly[i]){
/*
k--;
if(k!=0){
printf("%d %.1f ", i, poly[i]);
}
else{
printf("%d %.1f", i, poly[i]);
break;
}
*/
printf(" %d %.1f", i, poly[i]);
}
}
}

嗯,这一题有两个地方是我自己需要注意的:

  1. 题目的要求没有注意,因为习惯了用int所以也没有注意到小数的存在,导致在一开始输入测试的时候经常出错。
  2. 同样是输出格式的问题,什么末尾空格之类的。这个还是得自己多想,比如完全没有必要弄多一个cnt变量,这样反而更易出错。

看考研的很多同学都推荐晴神宝典,所以之后的学习也会围绕着这两本书来看了。