POJ 1060 Modular multiplication of polynomials(多项式的加减乘除,除法转化成减法来求)
题意:给出f(x),g(x),h(x)的 (最高次幂+1)的值,以及它们的各项系数,求f(x)*g(x)/h(x)的余数。
这里多项式的系数只有1或0,因为题目要求:这里多项式的加减法是将系数相加/减后再模2,这样其实也就可以用异或运算来代替加减法。
思路:看代码吧,水题一个,主要在于把除法转化成减法,一次一次减就行。
#include <iostream>
#include <stdio.h>
#include <string.h> using namespace std;
const int maxn=;
//f,g,h存储的是多项式的系数,sum存储的是f*g的系数以及最后余数的系数
int f[maxn],g[maxn],h[maxn],sum[maxn];
int lf,lg,lh,ls;//分别为f,g,h,sum的最高次幂 //比较sum表示的多项式与h表示的多项式的大小
int compare() {
if(ls<lh)
return -;
if(ls>lh)
return ;
for(int i=ls-; i>=; i--) {
if(sum[i]==h[i])
continue;
if(sum[i]>h[i])
return ;
if(sum[i]<h[i])
return -;
}
return ;
}
int main() {
int t,d;
scanf("%d",&t);
while(t--) {
memset(h,,sizeof(h));
memset(sum,,sizeof(sum));
//将f多项式的信息存入f数组
scanf("%d",&d);
lf=d-;
for(int j=lf; j>=; j--) {
scanf("%d",&f[j]);
}
//将g多项式的信息存入g数组
scanf("%d",&d);
lg=d-;
for(int j=lg; j>=; j--) {
scanf("%d",&g[j]);
}
//将h多项式的信息存入h数组
scanf("%d",&d);
lh=d-;
for(int j=lh; j>=; j--) {
scanf("%d",&h[j]);
}
//计算f*g的多项式
ls=lf+lg;
for(int i=lf; i>=; i--) {
for(int j=lg; j>=; j--) {
sum[i+j]=sum[i+j]^(f[i]&g[j]);
}
}
/*
关键是怎么求余数,这里是先判断sum多项式是否大于h多项式,
若大于,则sum减一次h,减去后的信息存入sum中。
再继续判断,直到sum小于h,则此时的sum为余数。
总之,就是把除法改成较简单的减法操作。
*/
while(compare()>=) {
d=ls-lh;
for(int i=ls; i-d>=; i--) {
sum[i]=sum[i]^h[i-d];
}
while(ls && !sum[ls])
ls--;
/*
原先一直WA的代码,在每次更新sum的最高次幂ls时出了错误。
int mark=0;
for(int i=ls; i-d>=0; i--) {
sum[i]=sum[i]^h[i-d]; 下面错误错在这里只判断了i>=d的情况,
有可能当i>=d的时候sum[i]=0,这样求出mark(也就是结果的最高次幂)为0;
但是可能有i<d的时候,有sum[i]=1,那么mark就不为0。 if(sum[i] && !mark) {
mark=i;
} }
ls=mark;
*/ } printf("%d",ls+);
for(int i=ls; i>=; i--) {
printf(" %d",sum[i]);
}
printf("\n");
}
return ;
}
POJ 1060 Modular multiplication of polynomials(多项式的加减乘除,除法转化成减法来求)的更多相关文章
- POJ 1060:Modular multiplication of polynomials
Modular multiplication of polynomials Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 4 ...
- POJ1060 Modular multiplication of polynomials
题目来源:http://poj.org/problem?id=1060 题目大意: 考虑系数为0和1的多项式.两个多项式的加法可以通过把相应次数项的系数相加而实现.但此处我们用模2加法来计算系数之和. ...
- POJ1060 Modular multiplication of polynomials解题报告 (2011-12-09 20:27:53)
Modular multiplication of polynomials Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 3 ...
- UVALive 2323 Modular Multiplication of Polynomials(模拟)
这是一个相对简单的模拟,因为运算规则已经告诉了我们,并且比较简单,不要被吓到…… 思路:多项式除以另外一个多项式,如果能除,那么他的最高次一定被降低了,如果最高次不能被降低,那说明已经无法被除,就是题 ...
- Lintcode: Hash Function && Summary: Modular Multiplication, Addition, Power && Summary: 长整形long
In data structure Hash, hash function is used to convert a string(or any other type) into an integer ...
- B - Housewife Wind POJ - 2763 树剖+边权转化成点权
B - Housewife Wind POJ - 2763 因为树剖+线段树只能解决点权问题,所以这种题目给了边权的一般要转化成点权. 知道这个以后这个题目就很简单了. 怎么转化呢,就把这个边权转化为 ...
- S - Making the Grade POJ - 3666 结论 将严格递减转化成非严格的
S - Making the Grade POJ - 3666 这个题目要求把一个给定的序列变成递增或者递减序列的最小代价. 这个是一个dp,对于这个dp的定义我觉得不是很好想,如果第一次碰到的话. ...
- poj 1060
http://poj.org/problem?id=1060 题意:多项式的运算的题目,不过这个运算有个特点,就是只要是同项的多项式,无论相加还是相减,都为0,给你三个多项式,分别为a,b,c. 要你 ...
- poj 2126 Factoring a Polynomial 数学多项式分解
题意: 给一个多项式,求它在实数域内的可分解性. 分析: 代数基本定理. 代码: //poj 2126 //sep9 #include <iostream> using namespace ...
随机推荐
- 常用JS加密编码算法
//#region UTF8编码函数 function URLEncode(Str) { if (Str == null || Str == "") return "&q ...
- IP进制站群原理
百度搜索:“inurl:0×00”,会发现全是以八进制.十六进制形式显示的域名(如下图),当点击后,浏览器会自动将这些域名转换为十进制的ip.这种方式在黑帽圈目前挺火爆的,用于做长尾词排名,可以带来可 ...
- Response.Redirect和Server.Transfer
今天又比较闲,逛了逛园子,看看asp.net的内容,看到一篇关于这两个的比较: http://www.cnblogs.com/yunfeng8967/archive/2008/03/06/109323 ...
- python 数字、字符串、列表常用函数
一.数字的标准类型: cmp():比较两个数的大小:返回值(-1,0,1). str():数字转化成字符串. type():返回数字类型. 转换工厂函数: int(obj,base=10) long( ...
- mvvm结构中数据的关联----wpf
1.在视图中PlotView.xaml <Button Content="<<" Height="23" HorizontalAlignmen ...
- [转]system函数返回值探究
对于system这个函数的功能早就有一定了解,读书期间,就学习了UNIX系统编程这本书,后来买了APUE.我这个人总是有好读书不求甚解的毛病.对于system函数只知其一,不知其二.后来被人问起相关的 ...
- 金融系列5《AUTH过程》
INITIALIZE UPDATE: 在安全通道的显式发起期间,INITIALIZEUPDATE命令用于在卡和主机之间传送卡和会话数据.这个命令开始一个安全通道会话的发起. CPURESET() // ...
- C# 命名参数【转】
命名参数(Named Arguments)就是说在调用函数时可以通过指定参数名称的方式来调用参数.它最大的好处就是方便调用参数时按调用者的需要来排列顺序,而不必死守函数声明时的顺序(相对于“位置参数” ...
- CentOS 6.3 配置 yum
ContOS 配置yum:1.cd /etc/yum.repos.d2.创建个任意目录,将所有文件移动到创建的目录中,除了CentOS-Media.repo3.编辑CentOS-Media.repov ...
- SVN四部曲之SVN命令精通
SVN 常用命令一览表 命令 功能 使用格式 checkout 检出 svn co URL up 更新到当前URL的末端 svn up switch 更新到某一tag/branch svn s ...