首页 > 其他分享 >CF1817C Similar Polynomials 题解

CF1817C Similar Polynomials 题解

时间:2023-05-02 20:35:55浏览次数:49  
标签:10 res 题解 ll CF1817C maxn dfrac Similar MOD

可能更好的阅读体验

题目传送门

Div.1 C 拉格朗日差值,赛时开香槟。

题目大意

给定 \(d\) 次两个多项式 \(A(x),B(x)\)。求 \(s\),使得 \(B(x)\equiv A(x+s) \pmod {10^9+7}\) ,保证 \(s\) 存在。
给出多项式的形式为给出 \(x=0,1,\cdots,d\) 模 \(10^9+7\) 的值。
\(d\le 2.5 \times 10^7\)。

题目解析

考虑 \(A(x)\equiv B(x-s) \pmod {10^9+7}\),展开 \(B(x-s)\)。
发现 \(A(x)\) 和 \(B(x)\) 最高位系数相同(记位 \(k\)),并且只要知道第二高位 \(k_1,k_2\),那么就有
\(k_1\equiv k_2-2 s k_1\pmod {10^9+7}\)。
所以关键在于求这三个数字。

考虑拉格朗日插值(考虑 \(x_i=i\),这里直接带入)

\[f(x)=\sum_{i=0}^{d}y_i\prod_{j=1,j\not=i}^{n}\dfrac{x-j}{i-j} \]

最高项系数为

\[\sum\limits_{i=0}^d\dfrac{y_i}{(-1)^{d-i} i! (d-i)!} \]

第二高项系数为

\[-\sum\limits_{i=0}^d \dfrac{y_i }{ (-1)^{d-i} i! (d-i)!} \dfrac{d(d+1)}{2} \]

预处理 \(i!\) 逆元即可,\(\Theta(n)\)。

int n; ll a[maxn],b[maxn],fact[maxn],inv[maxn],k,k1,k2;
ll fpow(ll x,ll y){
	ll tmp=x,res=1;
	while(y){
		if(y&1) res=res*tmp%MOD;
		y>>=1; tmp=tmp*tmp%MOD;
	} return res;
}
ll getk(int d,ll *p){
	ll ans=0; int i;
	for(i=0;i<=d;i++){
		ll t=p[i]*inv[i]%MOD*inv[d-i]%MOD; if((d-i)&1) t=MOD-t;
		ans=(ans+t)%MOD;
	} return ans;	
}
ll getk2(int d,ll *p){
	ll ans=0; int i;
	for(i=0;i<=d;i++){
		ll t=(1ll*d*(d+1)/2-i)%MOD*p[i]%MOD*inv[i]%MOD*inv[d-i]%MOD; if((d-i)&1) t=MOD-t;
		ans=(ans+t)%MOD;
	} return MOD-ans;
}
int main(){
#ifdef LOCAL
	freopen("1.in","r",stdin);
#endif
	n=read(); int i; for(i=0;i<=n;i++) a[i]=read(); for(i=0;i<=n;i++) b[i]=read();
	fact[0]=1; for(i=1;i<=n;i++) fact[i]=fact[i-1]*i%MOD;
	inv[n]=fpow(fact[n],MOD-2); for(i=n-1;i>=0;i--) inv[i]=inv[i+1]*(i+1)%MOD;
	k=getk(n,a); k1=getk2(n,a); k2=getk2(n,b);
	print((k2-k1+MOD)%MOD*fpow(k*n%MOD,MOD-2)%MOD);
	return 0;
}

标签:10,res,题解,ll,CF1817C,maxn,dfrac,Similar,MOD
From: https://www.cnblogs.com/jiangtaizhe001/p/17367904.html

相关文章

  • CF三月D题题解
    cf1798d题意:重排序列,使得其中连续子序列和的绝对值最大的最大值小于序列最大值减最小值,序列和为0考虑这样一种构造方案:正负数分类,0直接不管然后记录当前和sum,当sum非负时,加上一个负数,当sum是负数时,加上一个正数即可正确性证明:显然前缀和都是合法的。考虑计算前缀和数组,满足......
  • 「BZOJ2144」跳跳棋-题解
    「BZOJ2144」跳跳棋个人评价挺好的一道题,难点在于想到树这个结构和建树1题面跳跳棋是在一条数轴上进行的。棋子只能摆在整点上。每个点不能摆超过一个棋子。我们用跳跳棋来做一个简单的游戏:棋盘上有3颗棋子,分别在a,b,c这三个位置。我们要通过最少的跳动把他们的位置移......
  • Educational Codeforces Round 147 (Rated for Div. 2) 题解
    ALink。模拟,代码。BLink。模拟,代码。CLink。我们设\(c\)为最后相同的字符。性质:我们一定不会删除字符\(c\)。因此以\(c\)为最后字符的操作次数就是不包含字符\(c\)的极大段的最小操作次数的最大值。对于一个长度为\(l(l\ge1)\)的段,它的最小操作次数为\(\l......
  • P4198 楼房重建 题解
    P4198楼房重建题解线段树二分思路考虑在线段树内维护二信息:区间斜率最大值\(mx\)区间最大斜率上升序列长度\(len\)答案即为根节点的\(len\)。考虑转移信息二:蓝色部分代表左区间的上升序列,红色是右区间的,绿色折线就是当前区间的上升序列。......
  • P2051 [AHOI2009] 中国象棋 题解
    DP。状态设计是点睛之笔。首先显然有每行或每列只能有至多\(2\)个棋子。设状态\(f_{i,j,k}\)为第\(i\)行,有\(j\)列只放了一个棋子,\(k\)列放了两个棋子。之后直接转移即可。注意边界判断。code:点击查看代码#include<bits/stdc++.h>#definelllonglong#defined......
  • Java cmd下编译乱码问题解决办法
    1、报错样式 2、解决办法1)指定字符集,如下 2)修改编码格式通过“记事本”打开—》另存为3)修改环境变量此电脑——》属性——》高级系统设置——》环境变量——》(系统环境变量)新建——》“JAVA_TOOL_OPTIONS” “-Dfile.encoding=UTF-8”如下图:——》重启cmd,再......
  • CF1034D Intervals of Intervals 题解
    传送门CF1034DIntervalsofIntervals题目大意有\(n\)个线段,第\(i\)个是\([a_i,b_i]\)。定义区间\([l,r]\)的价值是第\(l\)个线段到第\(r\)个线段的并的长度。找出\(k\)个不同的区间,使得总价值最大。输出最大总价值。\(1\len\le3\times10^5,1\lek\le......
  • asm_second 题解(坐标转换+二维偏序)
    QuestionAsm.Def在第一象限内找到了n个可疑点。他需要为导弹规划路径。如图所示,导弹一开始在(0,0)。它只能朝着一定的方向——即严格夹在图中两条射线间的方向(白色部分)前进。注意,它不能沿着这两条射线前进,当然也不能停在原地。当导弹到达某个可疑点后,它仍然只能朝着该范围内......
  • 2023湖北CCPC省赛 蒻蒟的部分题解
    题目地址C.DarknessI题意:有一个n*n的方格,最开始全是白色,如果白色周围4格有两个黑色格子,1秒后这个白色格子会变成黑色,问如果要使全部格子都变为黑色,最开始最少需要涂黑几个格子Solution对于两个黑色格子,只有当满足\[|x_1-x_2|+|y_1-y_2|≤2\]才能涂黑以这两个格子为顶点的矩......
  • 2023 Hubei Provincial Collegiate Programming Contest题解 C F H I J K M
    补题链接:https://codeforces.com/gym/104337原文链接:https://www.eriktse.com/algorithm/1136.htmlM.DifferentBilling签到题,写几个柿子然后枚举B或C即可。#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;signedmain(){ ios::sync_with_stdio(......