$(i,1)$对答案的贡献为$l_iC(2n-i-2,n-i)a^{n-1}b^{n-i}$。

$(1,i)$对答案的贡献为$t_iC(2n-i-2,n-i)*a^{n-i}b^{n-1}$。

$(i,j)$的$c$对答案的贡献为$cC(2n-i-j,n-i)a^{n-j}b^{n-i}$。

$c$总的贡献为:

\[\begin{eqnarray*}
&&c\sum_{i=2}^n\sum_{j=2}^nC(2n-i-j,n-i)a^{n-j}b^{n-i}\\
&=&c\sum_{i=2}^n\sum_{j=2}^n(2n-i-j)!\times\frac{a^{n-j}}{(n-j)!}\times\frac{b^{n-i}}{(n-i)!}\\
&=&c\sum_{i=2}^n\sum_{j=2}^n(2n-i-j)!A_jB_i
\end{eqnarray*}\]

\[\begin{eqnarray*}
A_i=\frac{a^{n-i}}{(n-i)!}\\
B_i=\frac{b^{n-i}}{(n-i)!}
\end{eqnarray*}\]

\[\begin{eqnarray*}
ans+=c\sum_{i=4}^{2n}(2n-i)!\sum_{j=0}^i A_{i-j}B{j}
\end{eqnarray*}\]

FFT mod any prime即可。

时间复杂度$O(n\log n)$。

#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
const int N=524300,P=1000003,M=1000;
int n,a,b,c,i,j,k,pos[N],ans;
int pa[N],pb[N],fac[N],inv[N],A[N],B[N],C[N];
inline void read(int&a){char c;while(!(((c=getchar())>='0')&&(c<='9')));a=c-'0';while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';}
namespace FFT{
struct comp{long double r,i;comp(long double _r=0,long double _i=0){r=_r;i=_i;}comp operator+(const comp x){return comp(r+x.r,i+x.i);}comp operator-(const comp x){return comp(r-x.r,i-x.i);}comp operator*(const comp x){return comp(r*x.r-i*x.i,r*x.i+i*x.r);}comp conj(){return comp(r,-i);}
}A[N],B[N];
int a0[N],b0[N],a1[N],b1[N];
const long double pi=acos(-1.0);
void FFT(comp a[],int n,int t){for(int i=1;i<n;i++)if(i<pos[i])swap(a[i],a[pos[i]]);for(int d=0;(1<<d)<n;d++){int m=1<<d,m2=m<<1;long double o=pi*2/m2*t;comp _w(cos(o),sin(o));for(int i=0;i<n;i+=m2){comp w(1,0);for(int j=0;j<m;j++){comp&A=a[i+j+m],&B=a[i+j],t=w*A;A=B-t;B=B+t;w=w*_w;}}}if(t==-1)for(int i=0;i<n;i++)a[i].r/=n;
}
void mul(int*a,int*b,int*c){//c=a*bint i,j;for(i=0;i<k;i++)A[i]=comp(a[i],b[i]);FFT(A,k,1);for(i=0;i<k;i++){j=(k-i)&(k-1);B[i]=(A[i]*A[i]-(A[j]*A[j]).conj())*comp(0,-0.25);}FFT(B,k,-1);for(i=0;i<k;i++)c[i]=((long long)(B[i].r+0.5))%P;
}
//输入两个多项式,求a*b mod P,保存在c中,c不能为a或b
void mulmod(int*a,int*b,int*c){int i;for(i=0;i<k;i++)a0[i]=a[i]/M,b0[i]=b[i]/M;for(mul(a0,b0,a0),i=0;i<k;i++){c[i]=1LL*a0[i]*M*M%P;a1[i]=a[i]%M,b1[i]=b[i]%M;}for(mul(a1,b1,a1),i=0;i<k;i++){c[i]=(a1[i]+c[i])%P,a0[i]=(a0[i]+a1[i])%P;a1[i]=a[i]/M+a[i]%M,b1[i]=b[i]/M+b[i]%M;}for(mul(a1,b1,a1),i=0;i<k;i++)c[i]=(1LL*M*(a1[i]-a0[i]+P)+c[i])%P;
}
}
int main(){read(n),read(a),read(b),read(c);for(pa[0]=i=1;i<=n;i++)pa[i]=1LL*pa[i-1]*a%P;for(pb[0]=i=1;i<=n;i++)pb[i]=1LL*pb[i-1]*b%P;for(fac[0]=i=1;i<=n+n;i++)fac[i]=1LL*fac[i-1]*i%P;for(inv[0]=inv[1]=1,i=2;i<=n;i++)inv[i]=1LL*(P-inv[P%i])*(P/i)%P;for(i=1;i<=n;i++)inv[i]=1LL*inv[i]*inv[i-1]%P;for(i=1;i<=n;i++){read(j);if(i>1)ans=(1LL*fac[n+n-i-2]*inv[n-i]%P*pa[n-1]%P*pb[n-i]%P*j+ans)%P;}for(i=1;i<=n;i++){read(j);if(i>1)ans=(1LL*fac[n+n-i-2]*inv[n-i]%P*pa[n-i]%P*pb[n-1]%P*j+ans)%P;}ans=1LL*ans*inv[n-2]%P;for(k=1;k<=n;k<<=1);k<<=1;j=__builtin_ctz(k)-1;for(i=0;i<k;i++)pos[i]=pos[i>>1]>>1|((i&1)<<j);for(i=2;i<=n;i++)A[i]=1LL*pa[n-i]*inv[n-i]%P;for(i=2;i<=n;i++)B[i]=1LL*pb[n-i]*inv[n-i]%P;FFT::mulmod(A,B,C);for(i=4;i<=n+n;i++)ans=(1LL*C[i]*fac[n+n-i]%P*c+ans)%P;return printf("%d",ans),0;
}

  

BZOJ4451 : [Cerc2015]Frightful Formula相关推荐

  1. BZOJ4451 [Cerc2015]Frightful Formula 多项式 FFT 递推 组合数学

    原文链接http://www.cnblogs.com/zhouzhendong/p/8820963.html 题目传送门 - BZOJ4451 题意 给你一个$n\times n$矩阵的第一行和第一列 ...

  2. bzoj 4451 : [Cerc2015]Frightful Formula FFT

    4451: [Cerc2015]Frightful Formula Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 177  Solved: 57 [S ...

  3. 【bzoj 4451】[Cerc2015]Frightful Formula - 递推

    才没有在做cerc2015呢 看到好像不少人这题写fft卡得死死的啊,不如 O(n) O(n) 递推(雾) 首先可以观察出 (i,1) (i,1)这个格子为 x x时对(n,n)(n,n) a,b a ...

  4. BZOJ 4451: [Cerc2015]Frightful Formula

    Description 给你一个n*n矩阵的第一行和第一列,其余的数通过如下公式推出:  \(f_{i,j}=a\times f_{i,j-1}+b\times f_{i-1,j}+c\) 求\(f_ ...

  5. CERC2015 Frightful Formula 神奇的模意义下分数

    上网查了下这道题的正解是FFT......然而机智的xushu用待定系数法A了.... f[i,j]+k=a(f[i][j-1]+k)+b(f[i-1,j]+k) 解得 k=c/(a+b-1) 于是令 ...

  6. bzoj 4451: [Cerc2015]Frightful Formula 数学+排列组合

    题意 给你一个n*n矩阵的第一行和第一列,其余的数通过如下公式推出: F[i,j]=a*f[i,j-1]+b*f[i-1,j]+c 求f[n][n]%(10^6+3) 2<=n<=2000 ...

  7. [FFT || 递推] BZOJ 4451 [Cerc2015]Frightful Formula

    f1,i f_{1,i} 的贡献是 f1,i∗an−i∗bn−1∗Cn−i2n−i−2 f_{1,i}*a^{n-i}*b^{n-1}*C_{2n-i-2}^{n-i} fi,1 f_{i,1} 同理 ...

  8. Frightful Formula Gym - 101480F (待定系数法)

    Problem F: Frightful Formula \[ Time Limit: 10 s \quad Memory Limit: 512 MiB \] 题意 题意就是存在一个\(n*n\)的矩 ...

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

    正题 题目链接:https://www.luogu.com.cn/problem/P4351 题目大意 n∗nn*nn∗n的矩形,给出第一行和第一列的数,剩下的满足Fi,j=a∗Fi,j−1+b∗Fi ...

最新文章

  1. 职场中不可深交的五种人
  2. T-Sql 实现类似访问数组变量的操作
  3. Linux入门-shell使用技巧
  4. C# 获取gzip网页解压处理
  5. Java 给编译器看的注释--Annotation
  6. QQ浏览器怎么设置为默认浏览器
  7. 暖心!湖北伢雷军为家乡再捐1270万 大批紧缺医护物资连夜运抵武汉
  8. stm32 web get 参数_纯进口mpv销量排行榜 迈巴赫vs680商务车参数
  9. Qt核心剖析: moc
  10. php 四级联动插件,php四级联动
  11. IC设计职位详解之“数字前端设计工程师”就业必学课程
  12. CMM(Capability Maturity Model) 能力成熟度模型
  13. Intel核芯显卡微架构浅析
  14. 演讲稿【物性的神奇】
  15. Matlab 彩色图片直方图均衡化处理 line()函数实现
  16. 怎么在windows笔记本使用html,笔记本上快捷键用不了 笔记本电脑上音量键用不了了...
  17. 欢迎 SphereEx 成为开源社年度白金伙伴
  18. java基础之Integer和Long
  19. Nginx/Apache恶意User-Agent过滤列表 屏蔽蜘蛛爬虫
  20. 计算机位的英语,计算机中位的英文名字为()

热门文章

  1. 权力的游戏 第八季 最后一集下载
  2. 将bitmap裁剪为圆形
  3. promise用法详解
  4. python爬取小说基本信息_python实战项目:爬取某小说网
  5. 为什么说 java 程序员到了必须入手 spring boot 的时候?
  6. echarts详细配置title、yAxis/xAxis、tooltip、grid、legend
  7. 有什么办法可以消除眼袋吗?
  8. 河海大学2021年博士研究生招生公告
  9. 升级到log4j2之后在idea控制台输出日志中文乱码的解决方案
  10. 在SLAM中如何拼接使用多个激光雷达传感器数据