1009. Product of Polynomials (25)
This time, you are supposed to find A*B where A and B are two polynomials.
Input Specification:
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 Specification:
For each test case you should output the product 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 up to 1 decimal place.
Sample Input
2 1 2.4 0 3.2 2 2 1.5 1 0.5
Sample Output
3 3 3.6 2 6.0 1 1.6
#include<cstdio> const int maxn = 2010; struct Poly{ int exp;//指数 double coe;//系数 }poly[1010]; double ans[maxn]; int main(){ int n,m; scanf("%d",&n); for(int i = 0; i < n; i++){ scanf("%d %lf",&poly[i].exp,&poly[i].coe); } scanf("%d",&m); for(int i = 0; i < m; i++){ int exp; double coe; //类型设置错误 scanf("%d %lf",&exp,&coe); for(int j = 0; j < n; j++){ ans[poly[j].exp + exp] += (poly[j].coe * coe); //等号设置错误 } } int count = 0; for(int i = 0; i < maxn; i++){ if(ans[i] != 0.0) count++; //ans double类型,比较用小数 } printf("%d",count); for(int i = maxn; i >= 0; i--){ if(ans[i] != 0.0) printf(" %d %.1f",i,ans[i]); } return 0; }
#include<cstdio> const int maxn = 2010; //要设置2010 不然后面两个测试点不过 double p1[maxn],p2[maxn]; int main(){ int k; scanf("%d",&k); int ex; //指数 double coe; // 系数 for(int i = 0; i < k; i++){ scanf("%d %lf",&ex,&coe); p1[ex] = coe; } scanf("%d",&k); for(int i = 0; i < k; i++){ scanf("%d %lf",&ex,&coe); for(int j = 0; j < maxn; j++){ if(p1[j] != 0){ p2[j+ex] += coe*p1[j]; } } } int count = 0; for(int i = 0; i < maxn; i++){ if(p2[i] != 0) count++; } printf("%d",count); if(count == 0) printf(" 0"); else{ for(int i = maxn; i >= 0; i--){ if(p2[i] != 0){ printf(" %d %.1f",i,p2[i]); } } } return 0; }
20190722
#include<cstdio> const int maxn = 2020; //前两个点过不了 double arr[maxn] = {0}; double mul[maxn] = {0}; int main() { int exp; double coe; int n; scanf("%d",&n); for(int i = 0; i < n; i++) { scanf("%d %lf",&exp,&coe); arr[exp] = coe; } scanf("%d",&n); for(int i = 0; i < n; i++) { scanf("%d %lf",&exp,&coe); for(int j = 0; j < maxn ; j++) { if(arr[j] != 0.0) { mul[j + exp] += coe * arr[j]; } } } int count = 0; for(int i = 0; i < maxn ; i++) { if(mul[i] != 0.0) { count++; } } printf("%d",count); if(count == 0) printf(" 0"); else { for(int i = maxn; i >= 0; i--) { if(mul[i] != 0) { printf(" %d %.1f",i,mul[i]); } } } return 0; }