PAT L2-018. 多项式A除以B

Posted Fighting Heart

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT L2-018. 多项式A除以B相关的知识,希望对你有一定的参考价值。

暴力,模拟。

比赛搞了一个小时搞到了$1$分。赛场上不够冷静......之前没接触过多项式除法,但赛场上想到了除法的规则,莫名其妙写的时候不知道哪里崩了。对于这样的题目,应该先测一测数据的指数是不是很大,指数不大开数组存就可以了。

#include<bits/stdc++.h>
using namespace std;

double eps=1e-1;
double a[5010],b[5010],c[5010];
int n;

int main()
{
    memset(a,0,sizeof a);
    memset(b,0,sizeof b);

    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        int e; double x; scanf("%d%lf",&e,&x);
        a[e]=x;
    }

    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        int e; double x; scanf("%d%lf",&e,&x);
        b[e]=x;
    }

    int limit;
    for(int i=3000;i>=0;i--)
    {
        if(b[i]>0)
        {
            limit=i;
            break;
        }
    }

    while(1)
    {
        int g=-1;
        for(int i=3000;i>=0;i--)
        {
            if(a[i]!=0)
            {
                g=i;
                break;
            }
        }

        if(g<limit) break;

        c[g-limit] = a[g]/b[limit];

        for(int i=0;i<=3000;i++)
        {
            if(g-limit+i<=3000)
                a[g-limit+i]-=c[g-limit]*b[i];
        }

        for(int i=0;i<=3000;i++)
        {
            if(abs(a[i])<eps) a[i]=0;
            if(abs(b[i])<eps) b[i]=0;
            if(abs(c[i])<eps) c[i]=0;
        }
    }

    int num1=0,num2=0;
    for(int i=3000;i>=0;i--)
    {
        if(c[i]==0) continue;
        num1++;
    }

    if(num1==0) printf("0 0 0.0\n");
    else
    {
        printf("%d ",num1);
        for(int i=3000;i>=0;i--)
        {
            if(c[i]==0) continue;
            printf("%d %.1f",i,c[i]);
            num1--;
            if(num1==0) printf("\n");
            else printf(" ");
        }
    }

    for(int i=3000;i>=0;i--)
    {
        if(a[i]==0) continue;
        num2++;
    }

    if(num2==0) printf("0 0 0.0\n");
    else
    {
        printf("%d ",num2);
        for(int i=3000;i>=0;i--)
        {
            if(a[i]==0) continue;
            printf("%d %.1f",i,a[i]);
            num2--;
            if(num2==0) printf("\n");
            else printf(" ");
        }
    }

    return 0;
}

 

以上是关于PAT L2-018. 多项式A除以B的主要内容,如果未能解决你的问题,请参考以下文章

L2-018. 多项式A除以B

团体程序设计天梯赛 L2-018. 多项式A除以B(模拟)

多项式A除以B

PAT乙级 1017. A除以B (20)

PAT 1017 A除以B

PAT 1017. A除以B (20)