zoukankan      html  css  js  c++  java
  • 团体程序设计天梯赛 L2-018. 多项式A除以B(模拟)

    题意:给你A,B两个多项式,问你A/B的值;注意多项式给你的是每个式子的指数与系数;保留到一位小数,如果出现系数为0(保留后也是)的情况,请不要输出它,如果没有非系数为0的情况就输出特殊

    题解:多项式类似于“a*x^4+b*x^3+c*x^2+d*x^1+e*x^0”的形式,两个多项式除法就是模拟除法做

       现在被除数最大指数的系数、被 除数最大指数的系数除以、结果就是商的系数,两个指数的差就是商的指数

       然后枚举除数每一位乘以这个值来被 被除数减去,最后找被除数后一个位置继续循环,直到被除数最大项大于除数最大项

       最后有一个点需要注意,因为需要的是保留答案后系数为0也不能输出,所以在保留答案是一定要判断是否为0,不能再最后输出时在判断

    #include<set>
    #include<map>
    #include<queue>
    #include<stack>
    #include<cmath>
    #include<vector>
    #include<string>
    #include<cstdio>
    #include<cstring>
    #include<iomanip>
    #include<stdlib.h>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    #define eps 1E-1
    #define Eps 1E-1
    /*注意可能会有输出-0.000*/
    #define sgn(x) (x<-Eps? -1 :x<Eps? 0:1)//x为两个浮点数差的比较,注意返回整型
    #define cvs(x) (x > 0.0 ? x+eps : x-eps)//浮点数转化
    #define zero(x) (((x)>0?(x):-(x))<eps)//判断是否等于0
    #define mul(a,b) (a<<b)
    #define dir(a,b) (a>>b)
    typedef long long ll;
    typedef unsigned long long ull;
    const int Inf=1<<28;
    const ll INF=1LL<<60;
    const double Pi=acos(-1.0);
    const int Mod=1e9+7;
    const int Max=100100;
    double divide[Max],divisor[Max];//被除数 除数
    double business[Max],remainde[Max];//商 余数
    int busindex[Max],remindex[Max];//答案系数
    int coundiv,counsor;
    void Print(int coun,int* ansindex,double* ans)
    {
        if(!coun)
            printf("0 0 0.0
    ");
        else
        {
            printf("%d",coun);
            for(int i=0;i<coun;++i)
            {
                if(!zero(ans[i]))
                printf(" %d %.1f",ansindex[i],ans[i]);
            }
            printf("
    ");
        }
        return;
    }
    void Divison(int n,int dif,double num)
    {
       for(int i=n;i>=dif;--i)
       {
           divide[i]-=divisor[i-dif]*num;
       }
        return;
    }
    void Solve(int maxdiv,int maxsor)
    {
        coundiv=counsor=0;
        for(int i=maxdiv;i>=maxsor;--i)
        {
            busindex[coundiv]=i-maxsor;
            int dif=busindex[coundiv];
            business[coundiv]=divide[i]/divisor[maxsor];
            Divison(i,dif,business[coundiv]);
            business[coundiv]=business[coundiv];
            if(sgn(business[coundiv])!=0)//注意
            coundiv++;
        }
        for(int i=maxsor-1;i>=0;--i)
        {
                remindex[counsor]=i;
                remainde[counsor]=divide[i];
                if(sgn(remainde[counsor])!=0)
                    counsor++;
        }
        return;
    }
    int main()
    {
        int n;
        while(~scanf("%d",&n))
        {
            memset(divide,0,sizeof(divide));
            memset(divisor,0,sizeof(divisor));
            int maxdiv=0,maxsor=0;
            int index;
            for(int i=0;i<n;++i)
            {
                scanf("%d",&index);
                maxdiv=max(maxdiv,index);
                scanf("%lf",&divide[index]);
            }
            scanf("%d",&n);
            for(int i=0;i<n;++i)
            {
                scanf("%d",&index);
                maxsor=max(maxsor,index);
                scanf("%lf",&divisor[index]);
            }
            Solve(maxdiv,maxsor);
            Print(coundiv,busindex,business);
            Print(counsor,remindex,remainde);
        }
        return 0;
    }
  • 相关阅读:
    Gson中@SerializedName 注解使用
    centos8 安装mongodb4.4
    ssh 连接manjaro失败
    git保存仓库的账号密码
    centos 安装etcd
    kubeadm部署k8s 拉取基础镜像
    centos 安装cloc 代码统计工具
    centos7 安装mongodb
    shell获取时间戳
    最详细的阿里云ECS服务器CentOS7上安装tomcat8服务(三)
  • 原文地址:https://www.cnblogs.com/zhuanzhuruyi/p/6629231.html
Copyright © 2011-2022 走看看