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培训之多项式加法的主要内容,如果未能解决你的问题,请参考以下文章