zoukankan      html  css  js  c++  java
  • pat 甲级 1009. Product of Polynomials (25)

    1009. Product of Polynomials (25)

    时间限制
    400 ms
    内存限制
    65536 kB
    代码长度限制
    16000 B
    判题程序
    Standard
    作者
    CHEN, Yue

    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

    思路:多项式相乘,模拟即可,要注意的是最终结果中系数为0的项不需要输出。
    AC代码:
    #define _CRT_SECURE_NO_DEPRECATE
    #include<iostream>
    #include<algorithm>
    #include<cmath>
    #include<cstring>
    #include<string>
    #include<set>
    #include<queue>
    using namespace std;
    #define INF 0x3f3f3f
    #define N_MAX 30+5
    #define M_MAX 2001
    struct x {
        int exp;
        double coef = 0;
        bool vis = 0;
    };
    x poly1[N_MAX],poly2[N_MAX];
    x poly[M_MAX];
    int n1, n2;
    int main() {
        cin >> n1;
        for (int i = 0; i < n1; i++)cin >> poly1[i].exp >> poly1[i].coef;
        cin >> n2;
        for (int i = 0; i < n2; i++)cin >> poly2[i].exp >> poly2[i].coef;
        for (int i = 0; i < n1;i++) {
            for (int j = 0; j < n2;j++) {
                int exp = poly1[i].exp + poly2[j].exp;
                poly[exp].vis = 1;
                poly[exp].exp= exp;
                poly[exp].coef+= poly1[i].coef*poly2[j].coef;
            }
        }
        
        int num = 0;
        //系数为0的项不用输出!!!!!!!!!
        for (int i = M_MAX-1; i >= 0; i--) if (poly[i].vis&&poly[i].coef!=0) num++;
        cout << num << " ";
        for (int i = M_MAX-1; i >=0;i--) {
            if (poly[i].vis&&poly[i].coef != 0) {
                num--;
                printf("%d %.1f%c",poly[i].exp,poly[i].coef,num==0?'
    ':' ');
            }
        }
        return 0;
    }
  • 相关阅读:
    BZOJ1264 [AHOI2006]基因匹配Match 动态规划 树状数组
    BZOJ1845 [Cqoi2005] 三角形面积并 扫描线 计算几何
    BZOJ1258 [CQOI2007]三角形tri 模拟
    BZOJ4972 八月月赛 Problem B 小Q的方格纸 二维前缀和
    BZOJ1218 [HNOI2003]激光炸弹 二维前缀和
    BZOJ1263 [SCOI2006]整数划分 高精度
    BZOJ1209 [HNOI2004]最佳包裹 三维凸包 计算几何
    BZOJ1207 [HNOI2004]打鼹鼠 动态规划
    BZOJ1202 [HNOI2005]狡猾的商人 spfa
    BZOJ1201 [HNOI2005]数三角形 大力出奇迹
  • 原文地址:https://www.cnblogs.com/ZefengYao/p/8538425.html
Copyright © 2011-2022 走看看