poj1060
来源:互联网 发布:宁波楼盘成交数据 编辑:程序博客网 时间:2024/06/06 17:10
Problem : Modular multiplication of polynomials
Description:定义两个多项式的加法和减法为当同幂级的项出现两次或不出现时,该幂级前边的系数为0,否则为1;两个多项式的乘法和普通的多项式乘法一样展开,然后按照加法或减法规则合并;两个多项式的除法为对这两个多项式相除取余。
Solution:多项式的乘法的话按照我们平常做的那样展开,然后模2决定其前边的系数,多项式的除法的话,类似我们平常的除法运算,如果不懂的话可以自行百度多项式取模运算。
Code(C++):
#include <iostream>#include <cstring>using namespace std;int a[3050];int b[3050];int c[3050];int ans[3050];int p[3050];void mul(int a[],int b[],int lena,int lenb,int ans[]){ for(int i=lena; i>=0; i--) { if(a[i]==0) continue; for(int j=lenb; j>=0; j--) { if(b[j]==0) continue; ans[i+j]+=1; ans[i+j]%=2; } } return ;}int length(int k){ int temp; for(int i=k; i>=0; i--) { if(ans[i]!=0) { temp=i; break; } } return temp;}int main(){ int N,i,k; int m,n,t,dex; cin>>N; while(N--) { memset(ans,0,sizeof(ans)); cin>>m; for(i=m-1; i>=0; i--) cin>>a[i]; cin>>n; for(i=n-1; i>=0; i--) cin>>b[i]; cin>>t; for(i=t-1; i>=0; i--) cin>>c[i]; //前两个数组相乘 mul(a,b,m-1,n-1,ans); k=length(m+n-2); dex=k-t+1; while(k>=t-1) { memset(a,0,sizeof(a)); dex=k-t+1; a[dex]=1; memset(p,0,sizeof(p)); mul(a,c,dex,t-1,p); for(i=k; i>=0; i--) { ans[i]=ans[i]+p[i]; ans[i]=ans[i]%2; } k=length(k); } cout<<k+1<<" "; for(i=k; i>=0; i--) cout<<ans[i]<<" "; cout<<endl; } return 0;}
0 0
- poj1060
- poj1060
- POJ1060
- poj1060
- poj1060 大数
- POJ1060 Modular multiplication of polynomials
- POJ1060 数组存储多项式+多项式乘法和取余,水
- POJ1060 Modular multiplication of polynomials解题报告 (2011-12-09 20:27:53)
- What'sNewOnInternet 1st
- Java中的数组
- Cookie/Session机制详解
- Java8 时间处理
- 机房收费(五)之总结
- poj1060
- c语言指针操作
- 【Postgresql源码分析之四】同步复制源码分析--支持多个同步备机
- 程序猿面试经验
- 每日小结
- HDU Problem 4004 The Frog's Games 【二分】
- JAVA学习笔记Day02——基本语法
- ddddslsssksl;ska;ek;aek;wenlnlskdfklwneknewikonweh2oi3hionsdcinsdikfno.ncnjwenjwnfwjubfuiwbdjnjdnfjd
- BOM、DOM总结