【7003】&&【a203】合并多项式


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;
}


【代码】

优质内容筛选与推荐>>
1、IntelliJ IDEA远程连接tomcat,实现单步调试
2、两个单链表的合并,并排序
3、WebStorm 常用快捷键
4、django-csrfmiddleware
5、php代码检查


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号