• 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 }
  • 相关阅读:
    C# Large Files MD5 C# 获取大文件MD5
    C# SmtpClient 发邮件
    Windows Server 2008 R2 install Visual Studio 2015 failed
    C# 下载泛型数据
    SetApartmentState(ApartmentState state).Ensure that your Main function has STAThreadAttribute marked on it. This exception is only raised if a debugger is attached to the process
    ADO.NET
    WPF DataGrid row background converter datagrid 行背景随绑定数据变化,转换器
    C# 截图ScreenCapture,保存
    打印发现function toUpperCase() { [native code] }
    正则匹配test
  • 原文地址:https://www.cnblogs.com/letlifestop/p/10579563.html
Copyright © 2020-2023  润新知