1009 Product of Polynomials(有点麻烦)

本题传送门

解题思路

这道题与之前的加法不同,之前加法可以直接用邻接表,因为之前的指数是不变的,所以直接用一个邻接表就能解决。这道题的难点就在于,乘法中指数会变,系数也会变。

其实真要写起来不难,就是看你怕不怕麻烦,我当时一直不想用PII,我觉得会有更好的方法,但是想不出来,最后再用PII写的,不过调试的过程中由于double漏掉了,调试了有一会,还有就是乘法中指数是相加的,我刚开始还写成乘法了。

ac✅️代码

#include<iostream>
#include<vector>
#include<algorithm>
#include<unordered_map>

using namespace std;

vector<pair<int,double>> st;
unordered_map<int,double> ans;

int main()
{
    int mx_mi = -1;
    for(int i = 1 ; i <= 2; i ++)
    {
        int k ; cin>>k;
        int zhishu ; 
        double xishu;
        
        if( i == 1 )
        {
            for(int j = 1 ; j <= k ; j ++)
            {
                cin>>zhishu>>xishu;
                st.push_back({zhishu,xishu});
                
            }
        }
        if(i == 2)
        {
            for(int j = 1 ; j <= k ; j ++)
            {
                cin>>zhishu>>xishu;
                for(pair<int,double> x : st)
                {
                    int zhi = x.first ;
                    double xi = x.second;
                    ans[zhi + zhishu] += (double)xi * xishu;
                    mx_mi = max(mx_mi , zhi+zhishu);    
                }
            }
        }
    }
    
    int cnt = 0;
    for(int i = 0 ; i <= mx_mi ; i ++) if(ans[i] != 0 ) cnt ++;
    
    cout<<cnt;
    
    for(int i = mx_mi ; i >= 0 ; i --)
    {
        if( ans[i] ) printf(" %d %.1lf" , i , ans[i]);
    }
    return 0;
}
posted @ 2026-03-30 21:49  shuiwangrenjia  阅读(5)  评论(0)    收藏  举报