团体程序设计天梯赛-练习集 - L2-018 多项式A除以B(25 分)

题目链接:点击打开链接

题目大意:略。

解题思路:见注释,注意最后精度必须严格控制。

AC 代码

#include<bits/stdc++.h>
#include<cmath>

#define mem(a,b) memset(a,b,sizeof a)
#define ssclr(ss) ss.clear(), ss.str("")
#define INF 0x3f3f3f3f
#define MOD 1000000007

using namespace std;

typedef long long ll;

const int maxn=1e4+10;

struct node
{
    int e;
    double d;
}nds[maxn], tnds[maxn], rnds[maxn];

set<int,greater<int>> st;

int main()
{
    int n,m,e,te;
    double d,td;
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        scanf("%d%lf",&e,&d);
        st.insert(e);
        tnds[e].e=e;
        tnds[e].d=d;
    }
    scanf("%d",&m);
    for(int i=0;i<m;i++) scanf("%d%lf",&nds[i].e,&nds[i].d);

    int l=0, k=0;
    while(1)
    {
        auto it=st.begin();
        e=*it;
        if(e<nds[0].e) break; // 如果被除项最高次小于除项的最高次 break
        te=tnds[e].e, td=tnds[e].d;

        rnds[l].e=(te-=nds[0].e); // 记录商
        rnds[l++].d=(td/=nds[0].d);

        for(int i=0;i<m;i++) // 更新被除项(最终为余项)
        {
            e=nds[i].e+te;
            d=nds[i].d*td;
            tnds[e].d-=d;
            tnds[e].e=e;
            st.insert(e);
        }
        st.erase(st.begin()); // 每次消除最大
    }

    for(int i=0;i<l;i++) if(fabs(rnds[i].d)>4*1e-2) k++;
    if(k==0) puts("0 0 0.0");
    else
    {
        printf("%d",k);
        for(int i=0;i<l;i++)
            if(fabs(rnds[i].d)>4*1e-2) printf(" %d %.1f",rnds[i].e,rnds[i].d);
        puts("");
    }

    l=0;
    for(int i=nds[0].e-1;i>=0;i--) if(fabs(tnds[i].d)>4*1e-2) l++;
    if(l==0){puts("0 0 0.0"); return 0;}
    printf("%d",l);
    for(int i=nds[0].e-1;i>=0;i--)
        if(fabs(tnds[i].d)>4*1e-2) printf(" %d %.1f",tnds[i].e,tnds[i].d);
    puts("");

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陆氪和他的那些代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值