zoukankan      html  css  js  c++  java
  • L2-018. 多项式A除以B

    L2-018. 多项式A除以B

    时间限制
    400 ms
    内存限制
    65536 kB
    代码长度限制
    8000 B
    判题程序
    Standard
    作者
    陈越

    这仍然是一道关于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,故不输出。

    输入样例:
    4 4 1 2 -3 1 -1 0 -1
    3 2 3 1 -2 0 1
    
    输出样例:
    3 2 0.3 1 0.2 0 -1.0
    1 1 -3.1
    

     题解:这个题目,我在考场上又没做出来。。。这么一想,不知道自己在考场上干嘛?划水划了几个小时?

    回来做这个题目又涨知识了。。。原来多项式是这么回事啊!

    这个题目有个小细节啊。。double类型的数据,不要直接写成 != 0  (!!!) 精度问题!!!, 写成 >1e-8 

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 //#define loc
     4 const int maxn=1e6+5;
     5 double a[maxn], b[maxn], ans[maxn];
     6 
     7 int main(){
     8     #ifdef loc
     9         freopen("data.in", "r", stdin);
    10     #endif
    11     memset(a, 0, sizeof(a));
    12     memset(b, 0, sizeof(b));
    13     memset(ans, 0, sizeof(ans));
    14     int n, m;
    15     cin>>n;
    16     int max_a=-1, max_b=-1, c, d, m_a, m_b;
    17     for(int i=0; i<n; i++){
    18         cin>>c>>d;
    19         a[c]=d;
    20         max_a=max(max_a, c);
    21     }
    22     m_a=max_a;
    23     cin>>m;
    24     for(int i=0; i<m; i++){
    25         cin>>c>>d;
    26         b[c]=d;
    27         max_b=max(max_b, c);
    28     }
    29     m_b=max_b;
    30     //cout<<max_a <<" "<<max_b<<endl;
    31     /*
    32     for(int i=n; i>=0; i--) cout<<i<<" "<<a[i]<<" ";
    33     cout<<endl;
    34     for(int i=m; i>=0; i--) cout<<i<<" "<<b[i]<<" ";
    35     cout<<endl;
    36     */
    37     int cnt_1=0, cnt_2=0;
    38     while(max_a>=max_b){
    39         double x=a[max_a]/b[max_b];
    40         ans[max_a-max_b]=x;
    41         if(fabs(x)>=0.05)    cnt_1++;       //浮点数的绝对值函数用fabs();整型用abs();
    42         for(int j=0; j<=max_b; j++){
    43             a[j+max_a-max_b]-=b[j]*x;
    44         }
    45         int j;
    46         for(j=max_a; j>=0; j--){
    47             if(fabs(a[j])>=0.05){
    48                 max_a=j;
    49                 break;
    50             }
    51         }
    52         if(j<0)    break;
    53     }
    54     if(cnt_1==0){
    55         cout<<"0 0 0.0";
    56     }
    57     else{
    58         cout<<cnt_1;
    59         for(int i=m_a; i>=0; i--){
    60             if(fabs(ans[i])>=0.05){
    61                 printf(" %d %.1f", i, ans[i]);
    62             }
    63         }        
    64     }
    65     cout<<endl;
    66     for(int i=m_a; i>=0; i--){
    67         if(fabs(a[i])>=0.05) cnt_2++;
    68     }
    69     if(cnt_2==0){
    70         cout<<"0 0 0.0";
    71     }
    72     else{
    73         cout<<cnt_2;
    74         for(int i=m_a; i>=0; i--){
    75             if(fabs(a[i])>=0.05){
    76                 printf(" %d %.1f", i, a[i]);
    77             }
    78         }        
    79     }
    80     cout<<endl;
    81     return 0;
    82 }
  • 相关阅读:
    几何变换
    螺旋线
    生产环境高可用centos7 安装配置RocketMQ-双主双从-同步双写(2m-2s-sync)
    CentOS7 安装配置RocketMQ --主从模式(master-slave)异步复制
    MybatisPlus----入门
    elasticsearch中term和match以及text和keyboard的解释
    怎么解决Windows的elasticsearch编码闪退问题
    数据库技术之事务
    JDBC------之结果集元数据的操作02
    JDBC------之结果集元数据的操作01
  • 原文地址:https://www.cnblogs.com/ledoc/p/6651270.html
Copyright © 2011-2022 走看看