首页 > 代码库 > 3-04. 一元多项式的乘法与加法运算(20)(ZJUPAT 结构体)
3-04. 一元多项式的乘法与加法运算(20)(ZJUPAT 结构体)
题目链接:http://pat.zju.edu.cn/contests/ds/3-04
设计函数分别求两个一元多项式的乘积与和。
输入格式说明:
输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。
输出格式说明:
输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。
样例输入与输出:
序号 | 输入 | 输出 |
1 | 4 3 4 -5 2 6 1 -2 0 3 5 20 -7 4 3 1 | 15 24 -25 22 30 21 -10 20 -21 8 35 6 -33 5 14 4 -15 3 18 2 -6 1 5 20 -4 4 -5 2 9 1 -2 0 |
2 | 2 1 2 1 0 2 1 2 -1 0 | 1 4 -1 0 2 2 |
3 | 2 -1000 1000 1000 0 2 1000 1000 -1000 0 | -1000000 2000 2000000 1000 -1000000 0 0 0 |
4 | 0 1 999 1000 | 0 0 999 1000 |
代码如下:
#include <cstdio> #include <cstring> #include <algorithm> #include <iostream> using namespace std; const int maxn = 5217; typedef struct { int x, y; int m, s; } node; node num1[maxn], num2[maxn]; node ans_mul[maxn], ans_sum[maxn]; int max1, max2, maxx; void mult() { for(int i = 0; i <= max1; i++) { for(int j = 0; j <= max2; j++) { ans_mul[i+j].m += num1[i].x*num2[j].x; } } } void sum() { for(int i = 0; i <= maxx; i++) { ans_sum[i].s += num1[i].x + num2[i].x; } } int main() { int n, m; scanf("%d",&n); int t1, t2; max1 = max2 = 0; for(int i = 0; i < n; i++) { scanf("%d %d",&t1,&t2); if(t2 > max1) max1 = t2; num1[t2].x = t1; } scanf("%d",&m); for(int i = 0; i < m; i++) { scanf("%d%d",&t1,&t2); if(t2 > max2) max2 = t2; num2[t2].x = t1; } int mul_max = max1+max2; maxx = max(max1, max2); mult(); sum(); int flag = 0; for(int i = mul_max; i >= 0; i--) { if(!ans_mul[i].m) { continue; } if(!flag) { printf("%d %d",ans_mul[i].m,i); flag = 1; } else { printf(" %d %d",ans_mul[i].m,i); } } if(!flag) { printf("0 0"); } printf("\n"); flag = 0; for(int i = maxx; i >= 0; i--) { if(!ans_sum[i].s) { continue; } if(!flag) { printf("%d %d",ans_sum[i].s,i); flag = 1; } else { printf(" %d %d",ans_sum[i].s,i); } } if(!flag) { printf("0 0"); } printf("\n"); return 0; }
3-04. 一元多项式的乘法与加法运算(20)(ZJUPAT 结构体)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。