您的位置:首页 > 其它

1026 Modular multiplication of polynomials

2013-01-20 20:46 465 查看
这道题目是多项式相乘、求模。。按照题目中的规则,可以看出,多项式的加法和减法是相同的结果,那么多项式的除法都可以用加法来计算了。代码的重点是21到24行,36到37行,是如何实现乘和求余的步骤。

#include <iostream>
#include <cstring>
using namespace std;
#define MAXN 2000
struct poly{ int deg,x[MAXN];};
void print(poly f)
{
cout<<f.deg<<' ';
for (int i=f.deg-1; i>0; --i) cout<<f.x[i]<<' ';
cout<<f.x[0]<<endl;
}
void read(poly &f)
{
cin>>f.deg;
for (int i=f.deg-1; i>=0; --i) cin>>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()
{
int t;
cin>>t;
while (t--)
solve();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: