hnu暑期CCF培训之多项式加法

Posted 一袍清酒付825

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hnu暑期CCF培训之多项式加法相关的知识,希望对你有一定的参考价值。

题目


描述的很简单,注意系数有可能是浮点数要用double存。

思路

其实思路很简单,不需要使用map与vector。用一个结构体存储每一项,有系数还有幂指数,然后第一次全部输入,第二次输入判断这个结构体数组中有没有这个数,有的话就加上,没有的话就在后面继续接上即可。

AC代码

#include <iostream>
#include <algorithm>
using namespace std;

struct num_I {
	int c_num;
	double x_num;
} I1[100000];

bool cmp(num_I A, num_I B) {
	return A.c_num > B.c_num;
}

int main() {
	int a, i = 0;
	double b;
	while (cin >> a >> b) {
		if (a == 0 && b == 0) {
			break;
		}
		I1[i].c_num = a;
		I1[i].x_num = b;
		++i;
	}
	int j = i;
	bool flag;
	while (cin >> a >> b) {
		flag = false;
		if (a == 0 && b == 0) {
			break;
		}
		for (int s = 0; s < j; ++s) {
			if (I1[s].c_num == a) {
				flag = true;
				I1[s].x_num += b; //说明找到了
				break;
			}
		}
		if (!flag) {
			I1[i].c_num = a;
			I1[i].x_num = b;
			++i;
		}
	}
	sort(I1, I1 + i, cmp);
	for (int t = 0; t < i; ++t) {
		if (I1[t].x_num)//要判断系数是否为0
			cout << I1[t].c_num << " " << I1[t].x_num << endl;
	}
}

如果一直有两组数据过不了的话,那么就试一下这一组数据看看行不行。
输入样例:
3 -14
8 25
0 0
3 14
0 0
输出样例:
8 25(没有3那一项的,因为此时系数为0,不用写出来)

收获

在最后那个,系数为0不用打印出来的样例给了我启发。其实CCF这类题目,它的数据太过于精妙,往往我们很难找出自己的错误所在。所以在接下来的刷题之路上,如果调了很多遍,还是有数据过不了的话,那么就要考虑:
1.大数据是否过得了 CCF毕竟是算法竞赛,肯定是要参入一点算法复杂度的,如果大数据过不了的那么就说明我们的算法不够优秀,就要换时间复杂度更小的算法。
2.有数类型的题目,要多关注0 就算是在数学上的话,0也是一个让很多竞赛er既讨厌又喜欢的数,很多题目会在0处设坑,本题就是一个很鲜明的例子。

以上是关于hnu暑期CCF培训之多项式加法的主要内容,如果未能解决你的问题,请参考以下文章

数据结构和算法-一元多项式运算算法(加法)

OJ多项式加法

每日一小练——二项式系数加法解

暑期培训第一周组队赛

140726暑期培训.txt

02-线性结构2 一元多项式的乘法与加法运算