题目B1010 一元多项式求导
-
题意
系数是指k.x^n
,其中的k
,指数值n
,正常求导。 -
思路
因为是指数降序输入,这样不存在项的合并,所以可以边输入边处理,然后这里我通过first去控制输出格式,同时也可以作为计数来用,去控制是否输出0 0
。 -
Code in C++
#include <iostream>
int main()
{
int first = 1;
long long e, n;
while (std::cin >> e >> n) {
if (n && e != 0) {
e = n * e;
n = n - 1;
if (!first) {
printf(" %d %d", e, n);
} else {
printf("%d %d", e, n);
}
first = 0;
}
}
if (first) {
printf("0 0");
}
printf("\n");
return 0;
}
题目A1009 Product of Polynomials
-
题意
这里的多项式形式还是和上面一题一样。系数是指k.x^n
,其中的k
,指数值n
,然后这里需要每项遍历做乘法。 -
思路
因为存在项数的合并问题,这里指数是天然的非负整数,然后题目给出指数大小不会大于1000,所以最大相乘的指数大小为2000,所以这里可以将数组下标作为系数,然后对应数组位置存储最后的值。这里需要注意的是可以合并一些操作,这里其实代码也没有必要开辟两个数组然后再进行计算操作。 -
Code in C++
#include <iostream>
#define maxn 2001
double a[11];
double e[maxn] = {0.0};
int ae[11];
int main()
{
int m, n;
std::cin >> m;
for (int i = 0; i < m; ++i) {
std::cin >> ae[i] >> a[i];
}
std::cin >> n;
int be;
double b;
for (int j = 0; j < n; ++j) {
std::cin >> be >> b;
for (int i = 0; i < m; ++i) {
e[ae[i] + be] += a[i] * b;
}
}
int count = 0;
for (int i = 0; i < maxn; ++i) {
if (e[i] != 0.0) {
++count;
}
}
printf("%d", count);
for (int i = maxn - 1; i >= 0; --i) {
if (e[i] != 0.0) {
printf(" %d %.1f", i, e[i]);
}
}
std::cout << std::endl;
return 0;
}
小结
- 读懂题意,B1010是计算最终结果都为0的时候才输出
0 0
- 注意合并一些没有必要的操作,比如A1009中没必要开两个数组,在另外一个数组输入的时候就可以开始计算。