首页 > 其他分享 >「ABC245D」 Polynomial division

「ABC245D」 Polynomial division

时间:2024-12-20 15:22:57浏览次数:3  
标签:division ll long Polynomial ABC245D array 式子

题意

给定多项式 \(A\) 和 \(C\),求 \(C\) 除以 \(A\) 的结果 \(B\)。

分析

先考虑用 \(a_i\) 和 \(b_j\) 表示 \(c_{i+j}\),多项式乘法的朴素方法是把两式的每一位都乘起来,最后相加。

具体形式为

\[\begin{array}{c} c_{n+m}=a_{n}b_{m}\\ c_{n+m-1}=a_{n}b_{m-1}+a_{n-1}b_{m}\\ c_{n+m-2}=a_{n}b_{m-2}+a_{n-1}b_{m-1}+a_{n-2}b_{m}\\ \vdots\\ c_{0}=a_{0}b_{0} \end{array} \]

这串式子看起来没什么用,但仔细观察可以发现,其中 \(a_i\) 和 \(c_i\) 都是已知的,而后一个式子只比前一个多了一个未知数 \(b_i\)。如果我们知道 \(b_{i+1}\sim b_{m}\) 的值,就可以求出 \(b_{i}\)。

带入式子,直接递推即可。事实上因为求的是 \(B\),只需要循环到 \(c_n\)。

时间复杂度大概是 \(O(n^2)\),可过。

Code

#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
#define dbg(x) cout<<#x<<": "<<x<<"\n"
inline ll read(){ll x=0,f=1;char c=getchar();while(c<48||c>57){if(c==45)f=0;c=getchar();}while(c>47&&c<58)x=(x<<3)+(x<<1)+(c^48),c=getchar();return f?x:-x;}
const ll mod=1e9+7,maxn=4e5+5,maxt=505;
ll n,m,a[maxn],b[maxn],c[maxn];
inline void solve(){
    n=read(),m=read();
    for(ll i=0;i<=n;++i)a[i]=read();
    for(ll i=0;i<=n+m;++i)c[i]=read();
    for(ll i=n+m;i>=n;--i){
        ll sum=0;
        for(ll j=n-1;i-j<=m;--j){
            sum+=a[j]*b[i-j];
        }
        b[i-n]=(c[i]-sum)/a[n];
    }
    for(ll i=0;i<=m;++i)printf("%lld ",b[i]);
}
signed main(){
    ll t=1;
    while(t--){
        solve();
    }
    return 0;
}

标签:division,ll,long,Polynomial,ABC245D,array,式子
From: https://www.cnblogs.com/run-away/p/18619347

相关文章

  • 题解:CF1968G2 Division + LCP (hard version)
    https://www.luogu.com.cn/problem/CF1968G2CF1968G2Division+LCP(hardversion)题解前言这题可以\(O(n\sqrt{n}\logn)\)再各种优化做,算法是二分、哈希(不知道包不包含根号分治,但是有用到根号分治的思想)。如果读题解有些抽象的话可以看代码辅助理解。题意转化由于......
  • 动手学运动规划: 2.1 基于5次多项式的参数方程曲线(Quintic Polynomial)
    技不如人,甘拜下风.—刀斯林......
  • [ABC137F] Polynomial Construction 题解
    明明有最厉害最好想的插值做法,怎么没有人写呢。思路考虑\(n\)个点可以确定一个\(n-1\)次多项式。如何确定。令\(l_i(x)=\prod_{j\not=i}\frac{(x-x_j)}{(x_i-x_j)}\)。可以发现这个多项式在\(x=x_i\)时值为一,在\(x=x_j(j\not=i)\)时值为零。那么就有:\[F(x)=\su......
  • CF1469D Ceil Divisions题解
    CF1469DCeilDivisions感觉是很巧妙的一题?一开始想到,对于任何小于$n$的数$x$,直接对它除以$n$可以得到$1$。那么对$3\simn-1$做完此操作后,还剩下$1$、$2$、$n$。将$n$变成$1$要花费$logn$次,显然总操作次数超过了$n+5$次。进一步地,发现瓶颈在于把$n$变成$1$,于是利用根号,用$\sqr......
  • ARC 180 D - Division into 3
    ARC180D-Divisioninto3首先考虑分成两段,首先两端中必定有一个是最大值,问题就是让另一段的最大值最小化。并且这两段一定一个是前缀\(\max\),一个是后缀\(\max\),那么显然就是只留第一个值或者只留最后一个值。所以就是\(mx+\min(a_l,a_r)\),然后考虑分成三段。对于一组询......
  • Solution - Atcoder ARC114F Permutation Division
    令\(a\)为题目中的\(P\)。首先考虑后手的重排策略是什么。因为\(a\)是个排列,元素互不相同,那么肯定就是按照每一段的第一个数的大小,越大的放在越前面。那么当\(a_1\lek\)的时候,显然先手会把以\(1\simk\)开头来划分段。因为否则存在一个开头\(>k\)的段,后手把其放......
  • 使用牛顿法近似整数的 sqrt,ZeroDivisionError
    Sqrt(x)给定一个非负整数x,返回x的平方根,向下舍入到最接近的整数。返回的整数也应该是非负数。不得使用任何内置指数函数或运算符。例如,不要在c++中使用pow(x,0.5)或在c++中使用x**0.5python.示例1:输入:x=4输出:2解释:4的平方根是2,所......
  • joi2022_yo2_c 国土分割 (Land Division) 题解
    国土分割(LandDivision)推销我的洛谷博客。题意给定一个\(n\timesm\)的矩阵\(a\),你需要选择在横向或纵向分割至少一次,使得每个分割出来的小矩阵的\(a_{i,j}\)之和相等。数据范围\(1\leqslantn,m\leqslant50\)。\(1\leqslanta_{i,j}\leqslant10^5\)。思......
  • 【吴恩达机器学习-week2】可选实验:特征工程和多项式回归【Feature Engineering and Po
    支持我的工作......
  • [题解]AT_agc054_b [AGC054B] Greedy Division
    思路首先不难发现一个规律,当\(sum\)为奇数时不可能有解。定义\(dp_{i,j,k,0/1}\)表示A在前\(i\)个数中选出和为\(j\)的\(k\)个数,且第\(i\)个不选/选的方案数。那么,我们只需要对于第\(i\)个数的状态分类讨论就能得到状态转移方程:不选\(i\),\(dp_{i,j,k,0}=......