首页 > 其他分享 >团体天梯练习 L2-018 多项式A除以B

团体天梯练习 L2-018 多项式A除以B

时间:2023-04-18 11:35:04浏览次数:61  
标签:typedef int 多项式 t2 t1 L2 天梯 018 include

L2-018 多项式A除以B

这仍然是一道关于 \(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


解题思路

我中学数学没学好,开始做道题的时候,不知道要多项式的除法是如何运算的,中学天天混日子无疑

主要是参考了柳婼的博客,L2-018. 多项式A除以B -PAT团体程序设计天梯赛GPLT。详细解释就看柳婼小姐姐的吧,我就不班门弄斧了,(ノへ ̄、)。

/*   一切都是命运石之门的选择  El Psy Kongroo  */
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<vector>
#include<queue>
#include<deque>
#include<stack>
#include<map>
#include<set>
#include<bitset>
#include<cmath>
#include<functional>
using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;
typedef pair<int, pii> piii;
typedef pair<double, double> pdd;
typedef pair<string, int> psi;
typedef __int128 int128;
#define PI acos(-1.0)
#define eps 1e-6
#define x first
#define y second
//int dx[4] = {1, -1, 0, 0};
//int dy[4] = {0, 0, 1, -1};
const int inf = 0x3f3f3f3f, mod = 1e9 + 7;

const int N = 3010;
int n, m, maxa, maxb;
double a[N], b[N], c[N];

int cntpos(double num[], int high){
    int cnt = 0;
    for(int i = high; i >= 0; i -- )
        if(abs(num[i]) + 0.05 >= 0.1) cnt ++ ;
    return cnt;
}

void show(double num[], int high){
    int nn = cntpos(num, high);
    printf("%d", nn);
    if(!nn) {
        printf(" 0 0.0");
        return;
    }
    for(int i = high; i >= 0; i -- )
        if(abs(num[i]) + 0.05 >= 0.1)
            printf(" %d %.1lf", i, num[i]);
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);
    //读入 a 和 b 的系数
    scanf("%d", &n);
    for(int i = 0; i < n; i ++ ){
        int t; scanf("%d", &t);
        maxa = max(maxa, t);
        scanf("%lf",  &a[t]);
    }

    scanf("%d", &m);
    for(int i = 0; i < m; i ++ ){
        int t; scanf("%d", &t);
        maxb = max(maxb, t);
        scanf("%lf", &b[t]);
    }

    int t1 = maxa, t2 = maxb;
    while(t1 >= t2){
        double cur = a[t1] / b[t2];    //c系数
        c[t1 - t2] = cur;
        for(int i = t1, j = t2; j >= 0; i -- , j -- ) 
            a[i] -= b[j] * cur;   //b[i - (t1 - t2)] 即 b[j]
        while(abs(a[t1]) < eps) t1 -- ;
    }

    show(c, maxa - maxb);
    printf("\n");
    show(a, t1);

    return 0;
}

标签:typedef,int,多项式,t2,t1,L2,天梯,018,include
From: https://www.cnblogs.com/MAKISE004/p/17328970.html

相关文章

  • 团体天梯练习 L2-017 人以群分
    L2-017人以群分社交网络中我们给每个人定义了一个“活跃度”,现希望根据这个指标把人群分为两大类,即外向型(outgoing,即活跃度高的)和内向型(introverted,即活跃度低的)。要求两类人群的规模尽可能接近,而他们的总活跃度差距尽可能拉开。输入格式:输入第一行给出一个正整数\(N\)(\(2≤......
  • 天梯赛赛前热身
    题解目录目录题解目录L2题单题解L2-008最长对称子串L2-016愿天下有情人都是失散多年的兄妹L2-019悄悄关注L2-025分而治之L2-035完全二叉树的层序遍历L2-039清点代码库L2-042老板的作息表L2-044大众情人L2题单进度标号标题涉及的算法L2-001紧急救援图论,......
  • sql2005 OPENDATASOURCE 需要Ad Hoc Distributed Quer
    execsp_configure'showadvancedoptions',1reconfigureexecsp_configure'AdHocDistributedQueries',1reconfigureGOSELECT*FROMOPENDATASOURCE('SQLOLEDB','DataSource=192.168.1.100,1433;UserID=sa;Password=......
  • html2canvas插件使用小结
    简介html2canvas能够实现在用户浏览器端直接对整个或部分页面进行截屏。这个html2canvas脚本将当页面渲染成一个canvas图片,通过读取DOM并将不同的样式应用到这些元素上实现。它不需要来自服务器任何渲染,整张图片都是在客户端浏览器创建。当浏览器不支持Canvas时,将采用Flashcanv......
  • 显卡性能排行天梯图
    笔记本中所需要的CPU并不是说越高越好,需要和显卡想配对,一般来说,笔记本电脑上的CPU性能都比较高,而显卡的型号较低点,如果不能够相互适配的话,会导致无法发挥出显卡或者CPU的真正性能等,这一次来详细查看一下CPU的排行榜天梯图,然后根据自己的需求酌情选择吧~【CPU天梯图】【天梯图大......
  • 团体天梯练习 L2-011 玩转二叉树
    L2-011玩转二叉树给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列。所谓镜面反转,是指将所有非叶结点的左右孩子对换。这里假设键值都是互不相等的正整数。输入格式:输入第一行给出一个正整数\(N(≤30)\),是二叉树中结点的个数。第二行给......
  • 团体天梯练习 L2-010 排座位
    L2-010排座位布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位。无论如何,总不能把两个死对头排到同一张宴会桌旁!这个艰巨任务现在就交给你,对任何一对客人,请编写程序告诉主人他们是否能被安排同席。输入格式:输入第一行给出3个正整数:\(N(≤100)\),即前来参宴的宾客总人数,则......
  • 团体天梯练习 L2-009 抢红包
    L2-009抢红包没有人没抢过红包吧……这里给出N个人之间互相发红包、抢红包的记录,请你统计一下他们抢红包的收获。输入格式:输入第一行给出一个正整数\(N(≤10^{4})\),即参与发红包和抢红包的总人数,则这些人从\(1\)到\(N\)编号。随后\(N\)行,第\(i\)行给出编号为\(i\)的......
  • 团体天梯练习 L2-008 最长对称子串
    L2-008最长对称子串对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定IsPAT&TAPsymmetric?,最长对称子串为sPAT&TAPs,于是你应该输出11。输入格式:输入在一行中给出长度不超过1000的非空字符串。输出格式:在一行中输出最长对称子串的长度。输入样例:IsPAT&TAP......
  • 团体天梯练习 L2-007 家庭房产
    L2-007家庭房产给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数、人均房产面积及房产套数。输入格式:输入第一行给出一个正整数$N(≤1000)$,随后N行,每行按下列格式给出一个人的房产:编号父母\(k\)孩子1...孩子\(k\)房产套数总面积其中编号是每个......