P4351-[CERC2015]Frightful Formula【组合数学,MTT】

正题

题目链接:https://www.luogu.com.cn/problem/P4351


题目大意

n∗nn*nnn的矩形,给出第一行和第一列的数,剩下的满足Fi,j=a∗Fi,j−1+b∗Fi−1,j+cF_{i,j}=a*F_{i,j-1}+b*F_{i-1,j}+cFi,j=aFi,j1+bFi1,j+c

Fn,nF_{n,n}Fn,n


解题思路

第一眼看以为是水题,因为给出的数字的贡献通过组合数很好算,但是后来发现麻烦的是那个ccc。我们考虑每个格子的ccc产生的贡献。

下面为了方便我们先默认让所有格子横纵坐标减111
对于一个格子(i,j)(i,j)(i,j),通过它的路径有(2n−i−jn−i)\binom{2n-i-j}{n-i}(ni2nij)种,然后产生的贡献是an−ibn−ja^{n-i}b^{n-j}anibnj。为了方便我们反过来表示,然后因为第一行第一列没有贡献所以nnn减一。
那么总共的贡献就是∑i=0n∑j=0naibi(i+ji)\sum_{i=0}^n\sum_{j=0}^na^ib^i\binom{i+j}{i}i=0nj=0naibi(ii+j)
然后因为有i+ji+ji+j很麻烦,考虑枚举i+ji+ji+j就有
∑i=02n∑j=max{0,i−n}min{i,n}ajbi−j(i+j)!j!(i−j)!\sum_{i=0}^{2n}\sum_{j=max\{0,i-n\}}^{min\{i,n\}}a^jb^{i-j}\frac{(i+j)!}{j!(i-j)!}i=02nj=max{0,in}min{i,n}ajbijj!(ij)!(i+j)!
(i+j)!(i+j)!(i+j)!拿出去就是一个卷积的形式了,模数比较丑所以要用MTTMTTMTT来做。(除了MTTMTTMTT部分全部自己推?)。

记得要预处理单位根,不然会被卡精度,时间复杂度O(nlog⁡n)O(n\log n)O(nlogn)(常数巨大)

好像有更简单的做法就是用一个xxx满足ax+bx+c=xax+bx+c=xax+bx+c=x的来消掉ccc这个元就可以直接做了,但是我不会。


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;
const double Pi=acos(-1);
const ll N=2e6+10,P=1e6+3;
ll n,a,b,c,ans,F[N],H[N],G[N];
ll inv[N],fac[N],r[N],apw[N],bpw[N];
ll power(ll x,ll b){ll ans=1;while(b){if(b&1)ans=ans*x%P;x=x*x%P;b>>=1;}return ans;
}
ll C(ll n,ll m)
{return fac[n]*inv[m]%P*inv[n-m]%P;}
namespace Poly{const ll seq=32768;struct complex{double x,y;complex(double xx=0,double yy=0){x=xx;y=yy;}}A[N],B[N],C[N],D[N],w[N];complex operator+(complex a,complex b){return complex(a.x+b.x,a.y+b.y);}complex operator-(complex a,complex b){return complex(a.x-b.x,a.y-b.y);}complex operator*(complex a,complex b){return complex(a.x*b.x-a.y*b.y,a.x*b.y+a.y*b.x);}void FFT(complex *f,ll n,ll op){for(ll i=0;i<n;i++)if(i<r[i])swap(f[i],f[r[i]]);for(ll p=2;p<=n;p<<=1){ll len=p>>1;for(ll k=0;k<n;k+=p){for(ll i=k;i<k+len;i++){complex tmp=w[n/len*(i-k)];if(op==-1)tmp.y=-tmp.y;complex tt=f[i+len]*tmp;f[i+len]=f[i]-tt;f[i]=f[i]+tt;}}}if(op==-1){for(ll i=0;i<n;i++)f[i].x=fabs(f[i].x/n+0.5);}return;}void MTT(ll *a,ll *b,ll *c,ll n,ll m){ll l=1;while(l<=n+m)l<<=1;for(ll i=0;i<l;i++)r[i]=(r[i>>1]>>1)|((i&1)?(l>>1):0);for (ll k=1;k<l;k<<=1)for (ll i=0;i<k;i++)w[l/k*i]=(complex){cos(i*Pi/k),sin(i*Pi/k)};for(ll i=0;i<n;i++)A[i].x=a[i]/seq,B[i].x=a[i]%seq;for(ll i=0;i<m;i++)C[i].x=b[i]/seq,D[i].x=b[i]%seq;FFT(A,l,1);FFT(B,l,1);FFT(C,l,1);FFT(D,l,1);complex t1,t2;for(ll i=0;i<l;i++){t1=A[i]*C[i];t2=B[i]*D[i];B[i]=A[i]*D[i]+B[i]*C[i];A[i]=t1;C[i]=t2;}FFT(A,l,-1);FFT(B,l,-1);FFT(C,l,-1);for(ll i=0;i<l;i++){c[i]=(c[i]+(ll)(A[i].x)*seq%P*seq%P)%P;c[i]=(c[i]+(ll)(B[i].x)*seq%P)%P;c[i]=(c[i]+(ll)(C[i].x))%P;}return;}
}
void init(){inv[1]=1;apw[0]=bpw[0]=1;for(ll i=1;i<=2*n;i++)apw[i]=apw[i-1]*a%P,bpw[i]=bpw[i-1]*b%P;for(ll i=2;i<=2*n;i++)inv[i]=(P-(P/i)*inv[P%i]%P)%P;inv[0]=fac[0]=1;for(ll i=1;i<=2*n;i++){fac[i]=fac[i-1]*i%P;inv[i]=inv[i-1]*inv[i]%P;}
}
signed main()
{scanf("%lld%lld%lld%lld",&n,&a,&b,&c);init();n--;for(ll i=0;i<=n;i++){ll x;scanf("%lld",&x);if(!i)continue;x=x*bpw[n-i]%P*apw[n]%P;(ans+=x*C(n+n-i-1,n-1)%P)%=P;}for(ll i=0;i<=n;i++){ll x;scanf("%lld",&x);if(!i)continue;x=x*apw[n-i]%P*bpw[n]%P;(ans+=x*C(n+n-i-1,n-1)%P)%=P;}//处理已知数列for(ll i=0;i<n;i++){F[i]=apw[i]*inv[i]%P;H[i]=bpw[i]*inv[i]%P;}Poly::MTT(F,H,G,n,n);for(ll i=0;i<2*n-1;i++)(ans+=G[i]*c%P*fac[i]%P)%=P;
//    for(ll i=0;i<=n;i++){
//        (ans+=P-apw[n-i]*bpw[n]%P*c%P*C(n+n-i,n)%P)%=P;
//		if(!i)continue;
//        (ans+=P-bpw[n-i]*apw[n]%P*c%P*C(n+n-i,n)%P)%=P;
//    }printf("%lld\n",ans);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/319874.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阶乘幂与有限微积分

定义 差分算子Δ\DeltaΔ&#xff1a;Δf(x)f(x1)−f(x)\Delta f(x)f(x1)-f(x)Δf(x)f(x1)−f(x)平移算子EEE&#xff1a;Ef(x)f(x1)E f(x)f(x1)Ef(x)f(x1)下降幂&#xff1a;n>0,{xn‾x(x−1)(x−2)...(x−n1)x−n‾1(x1)(x2)(x3)...(xn)n>0,\begin{cases}x^{\underlin…

【Floyd】灾后重建(luogu 1119)

灾后重建 luogu 1119 题目大意 给你一个图&#xff0c;每个点在一定时间后才能被通过&#xff0c;问在某个时间&#xff0c;两个点之间的最短路 输入样例 4 5 1 2 3 4 0 2 1 2 3 1 3 1 2 2 1 4 0 3 5 4 2 0 2 0 1 2 0 1 3 0 1 4输出样例 -1 -1 5 4数据范围 N⩽200&#x…

Ocelot简易教程(三)之主要特性及路由详解

作者&#xff1a;依乐祝原文地址&#xff1a;https://www.cnblogs.com/yilezhu/p/9664977.html上篇《Ocelot简易教程&#xff08;二&#xff09;之快速开始2》教大家如何快速跑起来一个ocelot实例项目&#xff0c;也只是简单的对Ocelot进行了配置&#xff0c;这篇文章会给大家详…

P4245-[模板]任意模数多项式乘法

正题 题目链接:https://www.luogu.com.cn/problem/P4245 题目大意 两个多项式&#xff0c;求它们的乘积模ppp。 解题思路 方法好像挺多&#xff0c;我用的是最简单的一种就是&#xff0c;先定一个常数sqqsqqsqq&#xff08;一般是q\sqrt qq​&#xff09;&#xff0c;把一个…

Poj 3070 Fibonacci

Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 26063 Accepted: 17394文章目录Description题意&#xff1a;题解&#xff1a;代码&#xff1a;Poj 3070 FibonacciDescription In the Fibonacci integer sequence, F0 0, F1 1, and Fn Fn − 1 Fn − 2 for…

生成函数化简技巧

一些重要式子 ∑i0∞xi11−x\sum_{i0}^{\infty}x^i\frac{1}{1-x}∑i0∞​xi1−x1​ 推论&#xff1a; 11−ax∑i0∞aixi\frac{1}{1-ax}\sum_{i0}^{\infty}a^ix^i1−ax1​∑i0∞​aixi 11−xk∑i0∞xik\frac{1}{1-x^k}\sum_{i0}^{\infty}x^{ik}1−xk1​∑i0∞​xik 11−cxk∑i0∞…

.NET西安社区 [拥抱开源,又见 .NET] 活动简报

拥抱开源, 又见 .NET」随着 .NET Core的发布和开源&#xff0c;.NET又重新回到了人们的视野。除了开源、跨平台、高性能以及优秀的语言特性&#xff0c;越来越多的第三方开源库也出现在了Github上——包括ML.NET机器学习、Xamarin移动开发平台、基于Actor模型的分布式框架Orlea…

HDU 2504 又见GCD

HDU 2504 文章目录Problem Description题解&#xff1a;代码&#xff1a;Problem Description 有三个正整数a,b,c(0<a,b,c<10^6)&#xff0c;其中c不等于b。若a和c的最大公约数为b&#xff0c;现已知a和b&#xff0c;求满足条件的最小的c。 Input 第一行输入一个n&#x…

【线段树】【LCT】【LCA】树点涂色(luogu 3703)

树点涂色 luogu 3703 题目大意 给出一棵树&#xff0c;每个节点的初始颜色不同&#xff0c;做若干操作&#xff1a; 1.在一个点到根节点路径上染上一种新的颜色 2.查询一条路径上有多少种不同的颜色 3.查询一个点x&#xff0c;使该点到根节点路径的不同颜色种数最多 输入样…

P3515-[POI2011]Lightning Conductor【整体二分,决策单调性】

正题 题目链接:https://www.luogu.com.cn/problem/P3507 题目大意 nnn个数字的一个序列aaa&#xff0c;对于每个位置iii求一个pip_ipi​使得对于任意jjj满足 piai−∣i−j∣≥pjp_ia_i-\sqrt{|i-j|}\geq p_jpi​ai​−∣i−j∣​≥pj​ 解题思路 化简一下发现我们是需要求出m…

关于二项式

组合数 (nm)\dbinom{n}{m}(mn​)&#xff1a;从 nnn 个物品中选出 mmm 个的方案数。 (nm)n!m!(n−m)!nm‾m!\dbinom{n}{m}\dfrac{n!}{m!(n-m)!}\dfrac{n^{\underline{m}}}{m!}(mn​)m!(n−m)!n!​m!nm​​ &#xff08;这个式子只依靠经典的组合意义&#xff0c;所以只在 0≤m≤…

dotnet core高吞吐Http api服务组件FastHttpApi

简介是dotNet core下基于Beetlex实现的一个高度精简化和高吞吐的HTTP API服务开源组件&#xff0c;它并没有完全实现HTTP SERVER的所有功能&#xff0c;而是只实现了在APP和WEB中提供数据服务最常用两个指令GET/SET&#xff0c;满足在应用实现JSON,PROTOBUF和MSGPACK等基于HTTP…

Poj 1284 Primitive Roots

文章目录Description题意&#xff1a;题解&#xff1a;代码&#xff1a;Poj 1284Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 6485 Accepted: 3697Description We say that integer x, 0 < x < p, is a primitive root modulo odd prime p if and onl…

P3507-[POI2010]GRA-The Minima Game【dp,博弈论】

正题 题目链接:https://www.luogu.com.cn/problem/P3507 题目大意 nnn个数&#xff0c;没人轮流取若干个并获得取走的数中最小数的权值&#xff0c;两人的目标都是自己的权值−-−对方的权值最大&#xff0c;求先手的权值−-−后手的权值。 解题思路 肯定是从大往小取&#x…

【LCT】【树状数组】Matches Are Not a Child‘s Play(luogu CF1137F)

正题 luogu CF1137F 题目大意 定义一棵树的产出序列为依次删除权值最小的叶子节点的顺序 进行q此操作&#xff1a; 1.把一个点的权值改为当前树中的最大权值1 2.查询一个点在删除序列中的位置 3.给出两个点&#xff0c;查询哪个在删除序列中的位置更前 解题思路 假设已经求出…

[XSY4220] 九万步(结论)

手动构造发现 x6x6x6 时是可行的 -101234567xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

一起开心2020暑假训练第一周

hdu 1576 A/B oj传送 题解&#xff1a; Poj 1061 青蛙的约会 oj传送 题解&#xff1a; hdu 1525 Euclid‘s Game oj传送 题解&#xff1a; Poj 3070 Fibonacci oj传送 题解&#xff1a; HDU 2504 又见GCD oj传送 题解&#xff1a; Poj 1284 Primitive Roots oj传送 …

ASP.NET Core 中的中间件

前言由于是第一次写博客,如果您看到此文章,希望大家抱着找错误、批判的心态来看。 sky!何为中间件?在 ASP.NET Framework 中应该都知道请求管道。可参考&#xff1a;浅谈 ASP.NET 的内部机制 系列&#xff0c;个人感觉超详细。题外话&#xff1a;说到请求管道&#xff0c;就想…

【bfs】重力球(luogu 7473/NOI Online 2021 普及组 T3)

正题 luogu 7473 题目大意 给出一个正方形区域&#xff0c;中间有一些障碍 现在有两个球&#xff0c;每次操作可以使两个球同时向一个方向移动&#xff0c;直到遇到障碍或边界 现在问你让两个球到同一个位置最少要多少步 解题思路 对于每次操作&#xff0c;球只有可能停在障…

CF700E-Cool Slogans【SAM,线段树合并,dp】

正题 题目链接:https://www.luogu.com.cn/problem/CF700E 题目大意 给出一个字符串SSS&#xff0c;求一个最大的kkk使得存在kkk个字符串其中s1s_1s1​是SSS的子串&#xff0c;si1s_{i1}si1​在sis_isi​中出现了至少222次。 解题思路 首先我们需要有两个结论 si1s_{i1}si1​…