题意:给出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(多项式的加减乘除,除法转化成减法来求)的更多相关文章

  1. POJ 1060:Modular multiplication of polynomials

    Modular multiplication of polynomials Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4 ...

  2. POJ1060 Modular multiplication of polynomials

    题目来源:http://poj.org/problem?id=1060 题目大意: 考虑系数为0和1的多项式.两个多项式的加法可以通过把相应次数项的系数相加而实现.但此处我们用模2加法来计算系数之和. ...

  3. POJ1060 Modular multiplication of polynomials解题报告 (2011-12-09 20:27:53)

    Modular multiplication of polynomials Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 3 ...

  4. UVALive 2323 Modular Multiplication of Polynomials(模拟)

    这是一个相对简单的模拟,因为运算规则已经告诉了我们,并且比较简单,不要被吓到…… 思路:多项式除以另外一个多项式,如果能除,那么他的最高次一定被降低了,如果最高次不能被降低,那说明已经无法被除,就是题 ...

  5. 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 ...

  6. B - Housewife Wind POJ - 2763 树剖+边权转化成点权

    B - Housewife Wind POJ - 2763 因为树剖+线段树只能解决点权问题,所以这种题目给了边权的一般要转化成点权. 知道这个以后这个题目就很简单了. 怎么转化呢,就把这个边权转化为 ...

  7. S - Making the Grade POJ - 3666 结论 将严格递减转化成非严格的

    S - Making the Grade POJ - 3666 这个题目要求把一个给定的序列变成递增或者递减序列的最小代价. 这个是一个dp,对于这个dp的定义我觉得不是很好想,如果第一次碰到的话. ...

  8. poj 1060

    http://poj.org/problem?id=1060 题意:多项式的运算的题目,不过这个运算有个特点,就是只要是同项的多项式,无论相加还是相减,都为0,给你三个多项式,分别为a,b,c. 要你 ...

  9. poj 2126 Factoring a Polynomial 数学多项式分解

    题意: 给一个多项式,求它在实数域内的可分解性. 分析: 代数基本定理. 代码: //poj 2126 //sep9 #include <iostream> using namespace ...

随机推荐

  1. Cllimbing Stairs [LeetCode 70]

    1- 问题描述 You are climbing a stair case. It takes n steps to reach to the top. Each time you can eithe ...

  2. 【Newtonsoft.Json】Window Phone Json解析开发包

    WP从服务器.API交换数据一般都是用JSON格式字符串. 下面介绍用Newtonsoft.Json来处理JSON. 准备 1.到 http://json.codeplex.com/ 下载Newton ...

  3. PHP合并数组保留key值

    PHP合并数组,键值不变   尝试了好几个合并数组的函数, 但是都是把key值重置, 导致key值丢失(因为key值是要用到的) 大大说, 最好用数组的相关函数, 网上随意找了下, 还是没找到. 因为 ...

  4. 不同浏览器的DNS超时重发机制(一)

    一.Chrome浏览器(37.0.2062.124 m) 1.在Win7环境下,DNS超时重发的时间间隔为:2s.2s.2s.2s(在这个时刻重复发2个DNS请求).2s.4s,再经过大约14s左右, ...

  5. 基础学习总结(八)--Intent中显示意图和隐式意图的用法

    Intent(意图)主要是解决Android应用的各项组件之间的通讯.Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组 ...

  6. C++ string的常用功能

    头文件为#include<string> string str,str1; char s[]; str.length和str.size()是一样的功能都是返回当前字符串的大小: str.e ...

  7. sublime text3的配置(整理)

    一.代码片段 开发人员很多时候是在做一些重复的工作. 针对不同数据表的增删改查都差不多,重复来重去的.很久不写程序了,利用十一假期在家看看书,写写程序. 最近一直很喜欢使用Sublime Text,发 ...

  8. 数据库操作类util

    package util; import java.sql.Connection; import java.sql.Driver; import java.sql.DriverManager; imp ...

  9. jdbc 连接 mysql 获取 数据集 条数

    package nona; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; im ...

  10. Spark菜鸟学习营Day4 单元测试程序的编写

    Spark菜鸟学习营Day4 单元测试程序的编写 Spark相比于传统代码是比较难以调试的,单元测试的编写是非常必要的. Step0:需求分析 在测试案例编写前,需完成需求分析工作,明确程序所有的输入 ...