-
//zoj1026 Modular multiplication of polynomials
-
//Accepted 1026 C ++ 00:00.03 436K
-
#include <stdio.h>
-
#include <string.h>
-
#define MAXN 1000
-
struct poly{ int deg,x[MAXN<<1];};
-
-
void print(poly f)
-
{
-
printf ("%d ",f.deg);
-
for (int i=f.deg-1; i>0; --i) printf ("%d ",f.x[i]);
-
printf ("%d/n",f.x[0]);
-
}
-
-
void read(poly &f)
-
{
-
scanf ("%d",&f.deg);
-
for (int i=f.deg-1; i>=0; --i) scanf ("%d",&f.x[i]);
-
}
-
//r=f*g
-
void mult(poly f,poly g,poly &r)
-
{
-
memset(r.x,0,sizeof(r.x));
-
for (int i=0; i<f.deg; ++i)
-
for (int j=0; j<g.deg; ++j)
-
r.x[i+j] = (r.x[i+j]+f.x[i]*g.x[j])%2;
-
r.deg = f.deg+g.deg-1;
-
}
-
//m=m%h
-
void mod(poly &m,poly h)
-
{
-
int i;
-
while (1){
-
for (i=m.deg-1; i>=0&&(!m.x[i]); --i);
-
if (i<h.deg-1){
-
m.deg = i+1;
-
break;
-
}
-
for (int j=h.deg-1; j>=0; --i,--j)
-
m.x[i] = (m.x[i]+h.x[j])%2;
-
}
-
}
-
-
void solve()
-
{
-
poly f,g,h,m;
-
read(f);
-
read(g);
-
read(h);
-
mult(f,g,m);
-
mod(m,h);
-
print(m);
-
}
-
-
int main()
-
{
-
#ifdef ONLINE_JUDGE
-
#else
-
freopen("1026.txt","r",stdin);
-
#endif
-
int t;
-
while (scanf("%d",&t)!=EOF)
-
while (t--)
-
solve();
-
#ifdef ONLINE_JUDGE
-
#else
-
fclose(stdin);
-
#endif
-
return 0;
-
}
zoj1026 Modular multiplication of polynomials
最新推荐文章于 2017-12-30 07:59:10 发布