zoukankan      html  css  js  c++  java
  • 多项式A除以B (25分)

    题目:这仍然是一道关于A/B的题,只不过A和B都换成了多项式。你需要计算两个多项式相除的商Q和余R,其中R的阶数必须小于B的阶数。

    输入分两行,每行给出一个非零多项式,先给出A,再给出B。每行的格式如下:

     N e[1] c[1] ...... e[N] c[N]

    分析:首先要明确知道多项式除法,比如B*D+C = A,在A/B中,D表示商,C表示余数,所以从A的最高项开始比较。

    当A的最高项次数大于等于B的最高项次数:很好,直接除。

    当A的最高项次数小于B的最高项次数:除不了,除数为0,余数是A。

    除法类似整数除法。注意当系数绝对值小于0.05的时候就约等于0(题目要求保留1位小数),否则容易死循换!

    #include<iostream>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<cstdio>
    #include<vector>
    #include<map>
    #include<set>
    #include<queue>
    //#define _for(i,a,b) for(int i=a;i<=b;i++)
    using namespace std;
    typedef long long ll;
    double eps=0.05;
    ll mod=1e15+7;
    const int INF =0x3f3f3f;
    const int MAXN=2e3+10;
    const int maxn = 1e5+10;
    //ll inf=100000000000000;
    //template<typename T>inline void read(T &x)
    //{
    //    x=0;
    //    static int p;p=1;
    //    static char c;c=getchar();
    //    while(!isdigit(c)){if(c=='-')p=-1;c=getchar();}
    //    while(isdigit(c)) {x=(x<<1)+(x<<3)+(c-48);c=getchar();}
    //   x*=p;
    //}
    typedef unsigned long long ull;
    const int N=1e5+7;
    double e1[N]={0},e2[N]={0},e3[N]={0};
    int main()
    {
        int n,ma1=0,ma2=0;
        scanf("%d",&n);
        for(int i=0;i<n;i++){
            int x;
            double y;
            scanf("%d%lf",&x,&y);
            e1[x]+=y;
            if(x>ma1){
                ma1=x;
            }
        }
        int m;
        scanf("%d",&m);
        for(int i=0;i<m;i++){
            double y;
            int x;scanf("%d%lf",&x,&y);
            e2[x]+=y;
            if(x>ma2)ma2=x;
        }
        if(ma2>ma1){
            printf("0 0 0.0
    ");
            printf("%d",n);
            for(int i=ma1;i>=0;i--){
                if(fabs(e1[i])>=eps){
                    printf(" %d %.1lf",i,e1[i]);
                }
            }
            printf("
    ");
        }
        else {
            int tp=ma1;
            while(ma1>=ma2){
                double y=e1[ma1]/e2[ma2];
                e3[ma1-ma2]+=y;
                for(int i=ma2;i>=0;i--){
                    if(fabs(e2[i])>=eps)e1[i+ma1-ma2]-=y*e2[i];
                }
                int tt=0,ii;
                for(ii=tp;ii>=0;ii--){
                    if(fabs(e1[ii])>=eps){
                        if(ii>tt)tt=ii;break;
                    }
                }
                if(ii<0)break;
                ma1=tt;
            }
            int f1=0,f2=0;
            for(int i=tp;i>=0;i--)if(fabs(e3[i])>=eps)f1++;
            for(int i=tp;i>=0;i--)if(fabs(e1[i])>=eps)f2++;
            if(f1==0){
                printf("0 0 0.0
    ");
            }
            else {
                printf("%d",f1);
                for(int i=tp;i>=0;i--){
                    if(fabs(e3[i])>=eps){
                        printf(" %d %.1lf",i,e3[i]);
                    }
                }
                printf("
    ");
            }
            if(f2==0){
                printf("0 0 0.0
    ");
            }
            else {
                printf("%d",f2);
                for(int i=tp;i>=0;i--){
                    if(fabs(e1[i])>=eps){
                        printf(" %d %.1lf",i,e1[i]);
                    }
                }
            }
        }
        return 0;
    }
    View Code
  • 相关阅读:
    docker 安装mysql
    Java web项目搭建系列之二 Jetty下运行项目
    Java web项目搭建系列之一 Eclipse中新建Maven项目
    Maven 添加其他Maven组件配置问题
    C# 中定义扩展方法
    Oracle 函数
    【Webservice】2 counts of IllegalAnnotationExceptions Two classes have the same XML type name
    Linux精简版系统安装网络配置问题解决
    Rsync 故障排查整理
    Failed to set session cookie. Maybe you are using HTTP instead of HTTPS to access phpMyAdmin.
  • 原文地址:https://www.cnblogs.com/kayiko/p/13544794.html
Copyright © 2011-2022 走看看