zoj-1026
来源:互联网 发布:电魂网络与阿里巴巴 编辑:程序博客网 时间:2024/05/19 19:43
#include<stdio.h>#include<memory.h>#include<algorithm>#define MAX 1000struct poly{ int degree; int x[MAX*2];};void read(poly &f){ scanf("%d",&f.degree); for(int i=f.degree-1;i>=0;--i) scanf("%d",&f.x[i]);}int mult(poly f,poly g,poly &product){ memset(product.x,0,sizeof(product.x)); for(int i=0;i<f.degree;++i) for(int j=0;j<g.degree;++j) product.x[i+j]=(product.x[i+j]+f.x[i]*g.x[j])%2; product.degree=f.degree+g.degree-1;}void mod(poly &m,poly h){ int i; while(1) { i=m.degree-1; while(i>=0 && !m.x[i]) --i; if(i<h.degree-1) { m.degree=i+1; break; } for(int j=h.degree-1;j>=0;--i,--j) m.x[i]=abs(m.x[i]-h.x[j])%2; }}int main(){ //freopen("d:\\test.txt","r",stdin); int t; scanf("%d",&t); while(t--) { poly f,g,h,answer; read(f); read(g); read(h); mult(f,g,answer); mod(answer,h); printf("%d ",answer.degree); for(int i=answer.degree-1;i>0;--i) printf("%d ",answer.x[i]); printf("%d\n",answer.x[0]); } return 0;}