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

    题目链接:https://pintia.cn/problem-sets/1108548596745592832/problems/1108548661014913033

    题目大意:

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

    输入格式:

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

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

    其中N是该多项式非零项的个数,e[i]是第i个非零项的指数,c[i]是第i个非零项的系数。各项按照指数递减的顺序给出,保证所有指数是各不相同的非负整数,所有系数是非零整数,所有整数在整型范围内。

    输出格式:

    分两行先后输出商和余,输出格式与输入格式相同,输出的系数保留小数点后1位。同行数字间以1个空格分隔,行首尾不得有多余空格。注意:零多项式是一个特殊多项式,对应输出为0 0 0.0。但非零多项式不能输出零系数(包括舍入后为0.0)的项。在样例中,余多项式其实有常数项-1/27,但因其舍入后为0.0,故不输出。

    具体思路:模拟多项式除法,注意精度控制。

    AC代码:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 # define ll long long
     4 # define inf 0x3f3f3f3f
     5 const int maxn = 1e5+100;
     6 double a[maxn],b[maxn],c[maxn];
     7 int main()
     8 {
     9     int n,m,tmp,maxa,maxb;
    10     scanf("%d",&n);
    11     for(int i=0; i<n; i++)
    12     {
    13         scanf("%d",&tmp);
    14         scanf("%lf",&a[tmp]);
    15         if(i==0)
    16             maxa=tmp;
    17     }
    18     scanf("%d",&m);
    19     for(int i=0; i<m; i++)
    20     {
    21         scanf("%d",&tmp);
    22         scanf("%lf",&b[tmp]);
    23         if(i==0)
    24             maxb=tmp;
    25     }
    26    int j;
    27     for(int i=maxa; i>=maxb; i--)
    28     {
    29         c[i-maxb]=a[i]/b[maxb];
    30         for( j=maxb; j>=0; j--)
    31         {
    32             a[i+j-maxb]-=b[j]*c[i-maxb];
    33         }
    34     }
    35     int num1=0,num2=0;
    36     for(int i=maxa-maxb; i>=0; i--)
    37     {
    38         if(fabs(c[i])>1e-6)
    39         {
    40             if(fabs(c[i])<0.05)
    41                 c[i]=0;
    42             else
    43                 num1++;
    44         }
    45     }
    46     if(num1==0)
    47     {
    48         printf("0 0 0.0
    ");
    49     }
    50     else
    51     {
    52         printf("%d",num1);
    53         for(int  i=maxa-maxb; i>=0; i--)
    54         {
    55            if(fabs(c[i])>1e-6)
    56         printf(" %d %.1lf",i,c[i]);
    57         }
    58         printf("
    ");
    59     }
    60     for(int i=maxb-1; i>=0; i--)
    61     {
    62         if(fabs(a[i])>1e-6)
    63         {
    64          //   cout<<a[i]<<endl;
    65             if(fabs(a[i])<0.05)
    66                 a[i]=0;
    67             else
    68                 num2++;
    69         }
    70     }
    71     if(num2==0)
    72     {
    73         printf("0 0 0.0
    ");
    74     }
    75     else
    76     {
    77         printf("%d",num2);
    78         for(int i=maxb-1; i>=0; i--)
    79         {
    80             if(fabs(a[i])>1e-6)
    81                 printf(" %d %.1lf",i,a[i]);
    82         }
    83         printf("
    ");
    84     }
    85 }
  • 相关阅读:
    Jmeter之http性能测试实战 非GUI模式压测 NON-GUI模式 结果解析TPS——干货(十一)
    UI Recorder 自动化测试 回归原理(九)
    UI Recorder 自动化测试 录制原理(八)
    UI Recorder 自动化测试 整体架构(七)
    UI Recorder 自动化测试 配置项(六)
    UI Recorder 自动化测试 工具栏使用(五)
    UI Recorder 自动化测试 回归测试(四)
    UI Recorder 自动化测试 录制(三)
    UI Recorder 自动化测试工具安装问题疑难杂症解决(二)
    UI Recorder 自动化测试安装教程(一)
  • 原文地址:https://www.cnblogs.com/letlifestop/p/10579563.html
Copyright © 2011-2022 走看看