Time Limit: 3 second

Memory Limit: 2 MB

问题描述

     求两个一元多项式的和。输入多项式方式为:多项式项数、每项系数和指数,按指数从大到小的顺序输入。输出多项式方式为:多项式项数、每项系数和指数,按指数从大到小的顺序输出,合并后的系数如果为0,则不输出该项。(假设系数、指数均为整数)

Input

输入n+m+2行,第一行输入为第一个多项式的项数n,接下来的n行的是第一个多项式的系数和指数。接着是第二个多项式的项数m,接下来的m行是第二个多项式的系数和指数。(系数与指数用一个空格隔开)

Output

输出若干行,第一行是合并后多项式的项数K,接下来的K行是每行多项式的系数和指数。(系数与指数用一个空格隔开)

Sample Input

    4
-5 6
3 2
1 1
8 0
5
8 9
6 6
-3 2
5 1
-20 0

Sample Output

    4
8 9
1 6
6 1
-12 0

【题解】

设置一个bo,数组,用来存指数为x的系数bo[x]。输入x,y 令bo[y]+=x即可,要注意y可能为负数,所以要设置一个zbo 和fbo数组,表示y是整数和负数的情况。

最后从一个很大的数递减到0,遇到bo[i]!=0 就输出 bo[i] 和i即可。然后是负数 ,从1到一个很大的数进行输出 遇到bo[i]!=0,输出bo[i]和-i;

【代码】

#include <cstdio>
#include <cstring> int n,m,zbo[100000],fbo[100000],num = 0; void input_data()
{
memset(zbo,0,sizeof(zbo));
memset(fbo,0,sizeof(fbo));//memset函数用于初始化,头文件是cstring
scanf("%d",&n); //输入第一个多项式的项数
for (int i = 1;i <= n;i++) //依次输入n个项
{
int x,y;
scanf("%d %d",&x,&y);
if (y >= 0)
zbo[y] += x;
else
fbo[-y] += x;
}
scanf("%d",&m); //输入第二个多项式的项数
for (int i = 1;i <= m;i++) //依次输入m个项
{
int xx,yy;
scanf("%d %d",&xx,&yy);
if (yy >= 0)
zbo[yy] += xx;
else
fbo[-yy] += xx;
}
} void output_ans()
{
for (int i = 99999;i >= 0;i--) //先要统计要输出的个数。
if (zbo[i] != 0)
num++;
for (int i = 1;i <=99999;i++)
if (fbo[i] != 0)
num++; printf("%d\n",num); for (int i = 99999;i >= 0;i--) //输出完个数之后再输出具体的项。
if (zbo[i] != 0)
printf("%d %d\n",zbo[i],i);
for (int i = 1;i <=99999;i++)
if (fbo[i] != 0)
printf("%d %d\n",fbo[i],-i);
} int main()
{
//freopen("F:\\rush.txt","r",stdin);
input_data();
output_ans();
return 0;
}

【代码】

【7003】&&【a203】合并多项式的更多相关文章

  1. hdu 5615 Jam's math problem(判断是否能合并多项式)

    方法一:由十字相乘相关理论我们能知道,如果要有p,k,q,m,那么首先要有解,所以b*b-4*a*c要>0,然而因为p,k,q,m是正整数,所以代表x1,x2都是有理数,有理数是什么鬼呢?就是解 ...

  2. 多项式A除以B

    这个问题我是在PAT大区赛题里遇见的.题目如下: 多项式A除以B(25 分) 这仍然是一道关于A/B的题,只不过A和B都换成了多项式.你需要计算两个多项式相除的商Q和余R,其中R的阶数必须小于B的阶数 ...

  3. Java_多项式加法

    题目内容: 一个多项式可以表达为x的各次幂与系数乘积的和,比如: 2x6+3x5+12x3+6x+20 现在,你的程序要读入两个多项式,然后输出这两个多项式的和,也就是把对应的幂上的系数相加然后输出. ...

  4. PAT 甲级1002 A+B for Polynomials (25)

    1002. A+B for Polynomials (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue T ...

  5. matlab化简符号表达式

    化简符号表达式计算机毕竟还是挺笨的, 经过一系列的符号计算后, 得到的结果可能只有它自己才能看懂, Matlab提供大量函数以用于符号表达式的化简. collect(f): 函数用途是合并多项式中相同 ...

  6. codechef : TREDEG , Trees and Degrees

    其实有原题,生成树计数 然鹅这题里面是两道题, 50pts 可以用上面那题的做法直接过掉,另外 50pts 要推推式子,搞出 O n 的做法才行(毕竟多项式常数之大您是知道的) 虽说这道题里面是没有 ...

  7. CodeForces 958F3 Lightsabers (hard) 启发式合并/分治 多项式 FFT

    原文链接http://www.cnblogs.com/zhouzhendong/p/8835443.html 题目传送门 - CodeForces 958F3 题意 有$n$个球,球有$m$种颜色,分 ...

  8. 51nod 1907(多项式乘法启发式合并)

    题目: 分析: 对于一个确定的生成子图,很明显是在一个连通块上走,走完了再跳到另一个连通块上,假设连通块个数为cnt,那么答案一定是$min(a_{cnt-1},a_cnt,..,a_{n-1})$ ...

  9. 合并两个以单链表形式表示的关于x的多项式(基于c语言)

    只写函数内部的,不懂得可以看前面一篇文章对链表的实现: pLinklist addBothLinklist(Linklist* first,Linklist* second){ Linklist *n ...

随机推荐

  1. tomcat的日志不输出日志信息的解决方法

    1.下载日志jar包,例如:commons-logging-1.1.1.jar.放在tomcat的bin目录下,或者是自己项目的lib包里. 2.修改tomcat的bin目录下面的catalina.b ...

  2. Leetcode700.Search in a Binary Search Tree二叉搜索树中的搜索

    给定二叉搜索树(BST)的根节点和一个值. 你需要在BST中找到节点值等于给定值的节点. 返回以该节点为根的子树. 如果节点不存在,则返回 NULL. class Solution { public: ...

  3. 利用IE浏览器查看元素绑定的JS代码

  4. JavaScript--取消a标签和form的submit提交默认行为

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. Mathematica 和 MATLAB、Maple 并称为三大数学软件

    Mathematica是一款科学计算软件,很好地结合了数值和符号计算引擎.图形系统.编程语言.文本系统.和与其他应用程序的高级连接.很多功能在相应领域内处于世界领先地位,它也是使用最广泛的数学软件之一 ...

  6. 泛型List 扩展 比较类

    List<string> outputList = resultList.Distinct(new Compare<string>((x, y) => (null != ...

  7. golang变量-数据类型一

    package main import "fmt" var t1 = 100 var t2 = 200 var t3 = 300 var ( u1 = 100 u2 = 200 u ...

  8. oracle审计的格式

    audit table; audit table by xxx(username); audit table by xxx(username) whenever not successful; 系统表 ...

  9. bzoj2424 订货

    Description 某公司估计市场在第i个月对某产品的需求量为Ui,已知在第i月该产品的订货单价为di,上个月月底未销完的单位产品要付存贮费用m,假定第一月月初的库存量为零,第n月月底的库存量也为 ...

  10. 两种最常用的 HTTP 方法:GET 和 POST。

    什么是 HTTP? 超文本传输协议(HTTP)的设计目的是保证客户机与服务器之间的通信. HTTP 的工作方式是客户机与服务器之间的请求-应答协议. web 浏览器可能是客户端,而计算机上的网络应用程 ...