POJ1060 Modular multiplication of polynomials

不想多说 全在代码里


#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;

int g[1001],f[1001],s[2001],h[1001];
int lg,ls,lh,lf;
int i,j;

void mul()  //乘
{

    for( i=0; i<lg; i++)
        for( j=0; j<lf; j++)
            s[i+j] ^= g[i]*f[j];
    ls=lg+lf-1;
    return ;

}

void mod()
{
    int t;
    int res[2001];

    while(ls>=lh)
    {
        memset(res,0,sizeof(res));
        t=ls-lh;;
        for( i=0; i<lh; i++)
        {
            if(h[i]==1)
                res[i+t]=1;
        }
        for( i=ls-1; i>=t; i--)
            s[i]^=res[i];
        for( i=ls-1; i>=0; i--)
        {
            if(s[i])
            {
                ls=i+1;
                break;
            }
            ls=0;
        }
    }
    return ;

}
int main()
{
    //freopen("in.txt","r",stdin);
    int n;
    scanf("%d",&n);
    while(n--)
    {
        memset(s, 0, sizeof(s));
		memset(f, 0, sizeof(f));
        memset(g, 0, sizeof(g));
        memset(h, 0, sizeof(h));

        scanf("%d",&lg);
        for( i=lg-1; i>=0; i--)
            scanf("%d",&g[i]);
        scanf("%d",&lf);
        for( i=lf-1; i>=0; i--)
            scanf("%d",&f[i]);
        scanf("%d",&lh);
        for( i=lh-1; i>=0; i--)
            scanf("%d",&h[i]);
        mul();
        mod();
        printf("%d",ls);
        if(ls==0)
            printf("0");
        else
            for( i=ls-1; i>=0; i--)
            {
                printf(" %d",s[i]);
            }
        printf("\n");
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值