您的位置:首页 > 其它

3-04. 一元多项式的乘法与加法运算(20)

2015-07-12 11:19 435 查看
由于题中数据量不是很大 想到 类似“散列 查找”的算法 将指数 映射到一维数组的下标 而数组的值为 系数。

#include<iostream>
#include<cstring>
#include<vector>
using namespace std;

#define Size 1000000// 1000*1000
int Poly_1[Size+1], Poly_2[Size+1], Added[Size+1], Mul[Size+1];// added mul 分别存储 加结果 乘结果 后打印

struct Node
{
        int C;//系数
        int E;//指数
};

int main()
{
        vector<Node>V;
        Node num;

        memset( Poly_1, 0, sizeof( Poly_1) );
        memset( Poly_2, 0, sizeof( Poly_2 ));
        memset( Added, 0, sizeof( Added ) );
        memset( Mul, 0, sizeof(Mul) );

        int N;
        cin>>N;
        for( int i=0; i<N; i++ ){
                cin>>num.C>>num.E;
                Added[num.E]=Poly_1[num.E]=num.C;
                V.push_back(num);
        }
        cin>>N;
        for( int i=0; i<N; i++ ){
                cin>>num.C>>num.E;
                Poly_2[num.E]=num.C;
                Added[num.E]+=num.C;
                for( int i=0; i<V.size(); i++ )// 将每次的输入依次相乘后保存到 Mul 中
                            Mul[num.E + V[i].E ]+=num.C*V[i].C;
        }
        bool flag=true;// 检测 相加 相乘 后的 值是否 为 0    默认 为0
        bool first = true;
        for( int i=Size; i>=0; i-- )
        {
                if( Mul[i]!=0 ){
                        flag = false;
                    if( first ){
                            first = false;
                        cout<<Mul[i]<<" "<<i;
                    }
                    else
                        cout<<" "<<Mul[i]<<" "<<i;
                }
        }
        if( flag )
            cout<<0<<" "<<0;
        cout<<endl;
        flag = true;
        first = true;
        for( int i=Size; i>=0; i-- )
        {
                if( Added[i]!=0 ){
                        flag = false;
                    if( first ){
                            first = false;
                        cout<<Added[i]<<" "<<i;
                    }
                    else
                        cout<<" "<<Added[i]<<" "<<i;
                }
        }
        if( flag )
            cout<<0<<" "<<0;
        cout<<endl;
        return  0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: