poj1060
来源:互联网 发布:外贸email软件 编辑:程序博客网 时间:2024/06/05 07:16
主要问题是一开始不理解多项式的除法该怎么做,看了discuss里一个人的提示才明白
http://poj.org/showmessage?message_id=145610
比如(x^6 + x^4 + x^2 + x + 1) (x^7 + x + 1)=x^13 + x^11 + x^9 + x^8 + x^6 + x^5 + x^4 + x^3 + 1 ,
再取x^8 + x^4 + x^3 + x + 1的模,把除式看做b,被除式看做a,则a/b可以这么算:
b*x^5,然后加到a中(因为是取2模,加就可以了也节省时间),得到x^11+x^4+x^3+1,再加上b*x^3,就得到了x^7+x^6+1。
一旦得到的式子次数小于除式b的次数就可以输出了。这里7<8,所以结果就出来了。
开始的时候,测试数据是过了,但提交时WA。。。
以为是余数为0的情况没有考虑,这种情况下应该输出0 0。。。
改了之后还是不对。。。
最后才发现dm应该为df+dg-1,而不是df+dg。。。
//Memory: 244KTime: 32MS//Language: C++Result: Accepted Source Code #include<iostream> #include<vector> using namespace std; int main() { unsigned caseNum,df,dg,dh; int i,j; cin>>caseNum; while(caseNum--) { cin>>df; vector<unsigned> fx(df,0); for(i=df-1; i>=0; --i) cin>>fx[i]; cin>>dg; vector<unsigned> gx(dg,0); for(i=dg-1; i>=0; --i) cin>>gx[i]; cin>>dh; vector<unsigned> hx(dh,0); for(i=dh-1; i>=0; --i) cin>>hx[i]; unsigned dm = df+dg-1; vector<unsigned> multi(dm,0); for(i=df-1; i>=0; --i)//乘法fx*gx { if(fx[i]) { for(j=dg-1; j>=0; --j) { multi[i+j] ^= (fx[i]*gx[j]); } } } while(dm>=dh) { vector<unsigned> temp(dm,0); for(i=dh-1; i>=0; --i)//hx乘以x的(dm-dh)次方 { temp[dm-dh+i] ^= hx[i]; } for(i=dm-1; i>=0; --i) { multi[i] ^= temp[i]; } for(i=dm-1; i>=0; --i) { if(multi[i]) break; } dm = i+1; temp.clear(); } cout<<dm<<" "; if(dm==0) cout<<0<<endl; else { for(i=dm-1; i>=0; --i) cout<<multi[i]<<" "; cout<<endl; } fx.clear(); gx.clear(); hx.clear(); multi.clear(); } return 0; }
- poj1060
- poj1060
- POJ1060
- poj1060
- poj1060 大数
- POJ1060 Modular multiplication of polynomials
- POJ1060 数组存储多项式+多项式乘法和取余,水
- POJ1060 Modular multiplication of polynomials解题报告 (2011-12-09 20:27:53)
- 进销存业务的自定义分解
- DataImport(译)
- dedecms取得三级分类及子分类
- glog Notes for Windows users
- java循环
- poj1060
- 利用ICU解决日期格式国际化问题
- Linux下RPM软件包的安装及卸载
- can 驱动头文件
- Discuz! 插件开发实例讲解
- 设计模式 - 迭代器模式
- “鼠标屏幕取词”技术
- 关于final与static
- 解决Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (gbk_chinese_ci,COERCIBLE) for operatio