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;
}

 

posted @ 2018-03-08 14:08  王清河  阅读(106)  评论(0编辑  收藏  举报