zoukankan      html  css  js  c++  java
  • PAT 解题报告 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


    题目描述:

    给定两个多项式的系数和指数, 算着两个多项式的乘积.

    算法分析:

    思路1:map保存项

    用map保存项,计算结果需要剔除map项值==0的项。

    思路2:hash保存项

    注意点:

    用map保存项,结果需要剔除map项值==0的项。

    map

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <vector>
    #include <map>
    
    using namespace std;
    
    int main()
    {
        int K, L;
        map<int,double> m1,m2,mp;
        scanf("%d", &K);
        for (int i=0; i<K; i++){
            int e;double c;
            scanf("%d%lf", &e, &c);
            m1[e] = c;
        }
        scanf("%d", &L);
        for (int i=0; i<L; i++) {
            int e;double c;
            scanf("%d%lf", &e, &c);
            m2[e] = c;
        }
    
        map<int,double>::iterator it1,it2,it;
        for (it1=m1.begin(); it1!=m1.end(); it1++) {
            for (it2=m2.begin(); it2!=m2.end(); it2++) {
                int key = it1->first + it2->first;
                double value = it1->second * it2->second;
                it = mp.find(key);
                if (it == mp.end()) {
                    mp[key] = value;
                }
                else {
                    it->second += value;
                }
            }
        }
        for(it=mp.begin(); it!=mp.end();) {
            if (it->second == 0.0) {
                mp.erase(it++);
            }
            else it++;
        }
        printf("%d", mp.size());
        map<int,double>::reverse_iterator rit;
        for (rit=mp.rbegin(); rit!=mp.rend(); rit++) {
            printf(" %d %.1lf", rit->first, rit->second);
        }
        return 0;
    }

    hash

    #include<cstdio>
    #include<cstring>
    
    #define MAXN 2001
    double hash[MAXN],hash1[MAXN];
    
    int main(){
        freopen("in.txt","r",stdin);
        int n1,n2,i,j,k;
        double tmp;
        //scanf("%d",&n1);
        while(scanf("%d",&n1)!=EOF){
            memset(hash,0,sizeof(hash));
            memset(hash1,0,sizeof(hash1));
            for(i=0;i<n1;i++){
                scanf("%d%lf",&k,&tmp);
                hash1[k]=tmp;
            }
            scanf("%d",&n2);
            for(i=0;i<n2;i++){
                scanf("%d%lf",&k,&tmp);
                for(j=1000;j>=0;j--){
                    hash[j+k]+=hash1[j]*tmp;
                }
            }
            int count=0;
            for(i=0;i<MAXN;i++){
                if(hash[i]!=0) count++;
            }
            if(count==0) printf("0
    ");
            else{
                printf("%d",count);
                for(i=MAXN-1;i>=0;i--){
                    if(hash[i]!=0) printf(" %d %.1lf",i,hash[i]);
                }
                printf("
    ");
            }
        }
        return 0;
    }
  • 相关阅读:
    【校招面试 之 C/C++】第23题 C++ STL(五)之Set
    Cannot create an instance of OLE DB provider “OraOLEDB.Oracle” for linked server "xxxxxxx".
    Redhat Linux安装JDK 1.7
    ORA-10635: Invalid segment or tablespace type
    Symantec Backup Exec 2012 Agent for Linux 卸载
    Symantec Backup Exec 2012 Agent For Linux安装
    You must use the Role Management Tool to install or configure Microsoft .NET Framework 3.5 SP1
    YourSQLDba介绍
    PL/SQL重新编译包无反应
    MS SQL 监控数据/日志文件增长
  • 原文地址:https://www.cnblogs.com/549294286/p/3571573.html
Copyright © 2011-2022 走看看