zoukankan      html  css  js  c++  java
  • PAT甲题 1009 Product of Polynomials

    PAT甲题 1009 Product of Polynomials


    写文章式复习法真是有奇效,算是初步摆脱了做过的题不回头看的陋习。刚写完甲题1010,余兴未了,顺便在此处反思总结一下甲题1009。

    题目大意:

    输入:
    以此格式输入两个多项式A和B:
    K N​1​​ a​N​1​​​​ N​2​​ a​N​2​​​​ … N​K​​ a​N​K(分别用两行输入)
    K为多项式非0项的个数​​,Ni为第i项指数,aNi为第I项系数。此处:1≤K≤10, 0≤N​K​​<⋯<N​2​​<N​1​​≤1000.
    输出:
    计算多项式A*B的结果,以同样格式输出,行末不能有多余空格,系数精确到小数点后一位。

    思路:

    为了提高算法效率,个人觉得没有必要将两个多项式均存储起来进行遍历计算。只需将第一个多项式存储,在第二个多项式输入进来时进行及时计算即可。作者采用了map进行存储,以指数作为关键字(first),以系数作为值(second)。

    坑点解析:

    要特别注意计算出来系数为0的项,无论是统计多项式项数,亦或者是输出的时候

    代码:

    #include<iostream>
    #include<map>
    using namespace std;
    int main()
    {
     map<int, double> mp; //存放第一个多项式
     map<int, double, greater<int>> mpout; //存放用于输出的多项式
     int ex, K;  //ex是指数
     double co; //co是系数
     cin >> K;
     for (int i = 0; i < K; i++)
     {
      cin >> ex >> co;
      mp[ex] = co; //将第一个多项式按指数为关键字存入mp
     }
     map<int, double>::iterator it; //用迭代器遍历map
     cin >> K;
     for (int i = 0; i < K; i++)
     {
      cin >> ex >> co;
      for (it = mp.begin(); it != mp.end(); it++) //第二个多项式每输入一项,遍历一遍mp,进行计算
      {
       mpout[it->first + ex] += it->second*co;
       if (mpout[it->first + ex] == 0) //系数为0项剔除
       	 mpout.erase(it->first);
      }
     }
     int size = mpout.size();
     if (size != 0)
      	printf("%d ", size); //这边建议用printf,因为不建议printf和cout同时使用
     for (it = mpout.begin(); it != mpout.end(); it++)
      (--size) != 0 ? printf("%d %.1f ", it->first, it->second) : printf("%d %.1f", it->first, it->second); //最后一次不输出空格
     return 0;
    }

    这就是作者的代码实现,若有不足之处欢迎大家批评指正!
    ​​

  • 相关阅读:
    SpringCloud (Finchley版本)教程(四):断路器(Hystrix)
    SpringCloud (Finchley版本)教程(三):服务消费者(Feign)
    SpringCloud (Finchley版本)教程(二): 服务消费者(rest+ribbon)
    SpringCloud (Finchley版本)教程(一): 服务的注册与发现Eureka
    CF1392H ZS Shuffles Cards 题解
    2020杭电多校第六场题解
    2020杭电多校第五场题解
    2020杭电多校第四场题解
    Educational Codeforces Round 92 (Rated for Div. 2)题解
    D. Recover it!(模拟,数学)
  • 原文地址:https://www.cnblogs.com/yuhan-blog/p/12309122.html
Copyright © 2011-2022 走看看