题目链接https://codeforces.com/gym/101480/attachments


题意

给出一个矩阵,第一行是数组 t t t,第一列是数组 l l l,其余的值为 F [ i ] [ j ] = a F [ i ] [ j − 1 ] + b F [ i − 1 ] [ j ] + c F[i][j]=aF[i][j-1]+bF[i-1][j]+c F[i][j]=aF[i][j−1]+bF[i−1][j]+c。问 F [ n ] [ n ] % 1 e 6 + 3 F[n][n]\%1e6+3 F[n][n]%1e6+3的值是多少


题解

对每个 t [ i ] t[i] t[i]和 l [ i ] l[i] l[i]考虑计算出他们的系数。比如对于 t [ 2 ] t[2] t[2],它在每个位置的系数可以列出来:

t 2 t2 t2 − - − − - − − - − . . . ... ...
C 1 0 a 0 b 1 C_1^0a^0b^1 C10​a0b1 C 2 1 a 1 b 1 C_2^1a^1b^1 C21​a1b1 C 3 2 a 2 b 1 C_3^2a^2b^1 C32​a2b1 C 4 3 a 3 b 1 C_4^3a^3b^1 C43​a3b1 . . . ... ...
C 2 0 a 0 b 2 C_2^0a^0b^2 C20​a0b2 C 3 1 a 1 b 2 C_3^1a^1b^2 C31​a1b2 C 4 2 a 2 b 2 C_4^2a^2b^2 C42​a2b2 C 5 3 a 3 b 2 C_5^3a^3b^2 C53​a3b2 . . . ... ...
C 3 0 a 0 b 1 C_3^0a^0b^1 C30​a0b1 C 4 1 a 1 b 3 C_4^1a^1b^3 C41​a1b3 C 5 2 a 2 b 3 C_5^2a^2b^3 C52​a2b3 C 6 3 a 3 b 3 C_6^3a^3b^3 C63​a3b3 . . . ... ...
C 4 0 a 0 b 1 C_4^0a^0b^1 C40​a0b1 C 5 1 a 1 b 4 C_5^1a^1b^4 C51​a1b4 C 6 2 a 2 b 4 C_6^2a^2b^4 C62​a2b4 C 7 3 a 3 b 4 C_7^3a^3b^4 C73​a3b4 . . . ... ...
. . . ... ... . . . ... ... . . . ... ... . . . ... ... . . . ... ...

所以对于每个 t [ i ] t[i] t[i]和 l [ i ] l[i] l[i]都可以 O ( 1 ) O(1) O(1)的计算出他在 F [ n ] [ n ] F[n][n] F[n][n]上的贡献。
然后就是多加上的 c c c了,一样的稍微列一下就可以发现它是帕斯卡矩阵的前缀和,也就是 ∑ i = 0 n − 2 ∑ j = 0 n − 2 C i + j i a i b j \sum{_{i=0}^{n-2}}\sum{_{j=0}^{n-2}}C{_{i+j}^{i}}a^ib^j ∑i=0n−2​∑j=0n−2​Ci+ji​aibj,比上面的表多了第一行,然后是求整个表的和。

关于这个有一些能够 O ( n ) O(n) O(n)的神仙做法,我这里写的是题解的 N T T NTT NTT做法
把式子变换一下即可:
∑ i = 0 n − 2 ∑ j = 0 n − 2 C i + j i a i b j \sum{_{i=0}^{n-2}}\sum{_{j=0}^{n-2}}C{_{i+j}^{i}}a^ib^j ∑i=0n−2​∑j=0n−2​Ci+ji​aibj
= ∑ i = 0 n − 2 ∑ j = 0 n − 2 ( i + j ) ! i ! j ! =\sum_{i=0}^{n-2}\sum_{j=0}^{n-2}\frac{(i+j)!}{i!j!} =i=0∑n−2​j=0∑n−2​i!j!(i+j)!​
= ∑ i = 0 n − 2 ∑ j = 0 n − 2 ( i + j ) ! a i i ! b j j ! =\sum_{i=0}^{n-2}\sum_{j=0}^{n-2}(i+j)!\frac{a^i}{i!}\frac{b^j}{j!} =i=0∑n−2​j=0∑n−2​(i+j)!i!ai​j!bj​
= ∑ i = 0 n − 2 ∑ j = 0 n − 2 f ( i + j ) g ( i ) h ( j ) =\sum_{i=0}^{n-2}\sum_{j=0}^{n-2}f(i+j)g(i)h(j) =i=0∑n−2​j=0∑n−2​f(i+j)g(i)h(j)
= ∑ k = 0 2 n − 4 f ( k ) ( g ∗ h ( k ) ) =\sum_{k=0}^{2n-4}f(k)(g*h(k)) =k=0∑2n−4​f(k)(g∗h(k))
题目给出来的模数 1 e 6 + 3 1e6+3 1e6+3刚好等于 500001 ∗ 2 + 1 500001*2+1 500001∗2+1,所以可以直接套上 N T T NTT NTT去求。


#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double db;
typedef pair<ll,int> piir;
const ll N=4e6+7;
const ll inf=1e18;
const ll mod=1e6+3;
const db pi=acos(-1);
ll g[N],h[N];
namespace NTT
{typedef long long ll;const ll MOD=1945555039024054273LL;const ll g=5;ll mul(ll x,ll y){return (x*y-(ll)(x/(long double)MOD*y+1e-6)*MOD+MOD)%MOD;}ll qpow(ll a,ll k){ll res=1LL;while(k>0){if(k&1)res=mul(res,a);a=mul(a,a);k>>=1;}return res;}void change(ll y[],int len){for(int i=1,j=len/2;i<len-1;i++){if(i<j)swap(y[i],y[j]);int k=len/2;while(j>=k){j-=k;k/=2;}if(j<k)j+=k;}}void ntt(ll y[],int len,int on){change(y,len);for(int h=2;h<=len;h<<=1){ll wn=qpow(g,(MOD-1)/h);if(on==-1)wn=qpow(wn,MOD-2);for(int j=0;j<len;j+=h){ll w=1LL;for(int k=j;k<j+h/2;k++){ll u=y[k];ll t=mul(w,y[k+h/2]);y[k]=(u+t)%MOD;y[k+h/2]=(u-t+MOD)%MOD;w=mul(w,wn);}}}if(on==-1){ll t=qpow(len,MOD-2);for(int i=0;i<len;i++)y[i]=mul(y[i],t);}}void cal(ll x1[],ll x2[],ll tot){int len=1;while(len<2*tot)len<<=1;ntt(x1,len,1);ntt(x2,len,1);for(int i=0;i<len;i++)x1[i]=mul(x1[i],x2[i]);ntt(x1,len,-1);}
}ll qpow(ll a,ll b){ll res=1;while(b){if(b&1) res=res*a%mod;b>>=1;a=a*a%mod;}return res;
}ll n,a,b,c;
ll l[N],t[N];
ll fac[N],iv[N];
ll comb(ll n,ll m){return fac[n]*iv[n-m]%mod*iv[m]%mod;}
int main()
{fac[0]=1;for(ll i=1;i<N;i++) fac[i]=(fac[i-1]*i)%mod;for(ll i=0;i<N;i++) iv[i]=qpow(fac[i],mod-2);scanf("%lld%lld%lld%lld",&n,&a,&b,&c);for(int i=1;i<=n;i++){scanf("%lld",&l[i]);}for(int i=1;i<=n;i++){scanf("%lld",&t[i]);}ll ans=0;for(int i=2;i<=n;i++){ans=(ans+t[i]*comb(2*n-i-2,n-i)%mod*qpow(a,n-i)%mod*qpow(b,n-1)%mod)%mod;ans=(ans+l[i]*comb(2*n-i-2,n-i)%mod*qpow(a,n-1)%mod*qpow(b,n-i)%mod)%mod;}for(ll i=0;i<=n-2;i++){g[i]=qpow(a,i)*iv[i]%mod;h[i]=qpow(b,i)*iv[i]%mod;}NTT::cal(g,h,n-1);for(ll i=0;i<=2*n-4;i++){g[i]%=mod;ans=(ans+c*fac[i]%mod*g[i]%mod)%mod;}printf("%lld\n",ans);
}

【NTT】Gym - 101480 - F - Frightful Formula相关推荐

  1. 【二】gym初次入门一学就会---代码详细解析简明教程----平衡杆案例

    相关文章: [一]gym环境安装以及安装遇到的错误解决 [二]gym初次入门一学就会-简明教程 [三]gym简单画图 [四]gym搭建自己的环境,全网最详细版本,3分钟你就学会了! [五]gym搭建自 ...

  2. 【四】gym搭建自己的环境,全网最详细版本,3分钟你就学会了!

    相关文章: [一]gym环境安装以及安装遇到的错误解决 [二]gym初次入门一学就会-简明教程 [三]gym简单画图 [四]gym搭建自己的环境,全网最详细版本,3分钟你就学会了! [五]gym搭建自 ...

  3. 2015-2016 ACM-ICPC, Central Europe Regional Contest (CERC 15) F.Frightful Formula(大数NTT)

    题目链接:http://codeforces.com/gym/101480/attachments mark一下O(1)快速乘,啥原理啊?还有这个长度计算,貌似也得好好学学啊? 代码: #includ ...

  4. Problem F: Frightful Formula

    题目: https://codeforces.com/gym/101480 给一个 n ∗ n n*n n∗n的矩阵,告诉第一行和第一列的数,并且有递推式 F ( i , j ) = a F ( i ...

  5. 【推导】【NTT】hdu6061 RXD and functions(NTT)

    题意:给定一个n次多项式f(x)的各项系数,让你求f(x-Σai)的各项系数. http://blog.csdn.net/v5zsq/article/details/76780053 推导才是最关键的 ...

  6. AT2064-[AGC005F]Many Easy Problems【NTT】

    正题 题目链接:https://www.luogu.com.cn/problem/AT2064 题目大意 给出nnn个点的一棵树,对于k∈[1,n]k\in[1,n]k∈[1,n]求出所有kkk个点的 ...

  7. 牛客挑战赛53G-同源数组(Easy Version)【NTT】

    正题 题目链接:https://ac.nowcoder.com/acm/contest/11193/G 题目大意 给出nnn个长度为mmm的数组,然后你每次可以进行差分(不会改变数组长度那种)和前缀和 ...

  8. P6800-[模板]Chirp Z-Transform【NTT】

    正题 题目链接:https://www.luogu.com.cn/problem/P6800 题目大意 给出一个nnn此多项式PPP,对于k∈[0,m−1]k\in[0,m-1]k∈[0,m−1]所有 ...

  9. CF1251F-Red-White Fence【NTT】

    前言 刚开始看错题推了半天的生成函数 正题 题目链接:https://www.luogu.com.cn/problem/CF1251F 题目大意 nnn个白色木板,kkk个红色木板,给出这些木板的高度 ...

最新文章

  1. 赵劲松:预知潜在风险,做化工安全科技创新的引领者
  2. 通用数据级别权限的框架设计与实现(4)-单条记录的权限控制
  3. badboy页面脚本发生错误,解决方案
  4. python编程基础与应用-有哪些适合零编程基础的人学习Python的书?
  5. Python导入模块Import和from+Import区别
  6. moldflow2019安装教程
  7. vue radio双向绑定_Vue是如何实现双向数据绑定的
  8. 我做 Fiori 开发经常使用的几个系统,不同的 SAP UI5 版本
  9. aws lambda使用_使用Lambda,Api Gateway和CloudFormation在AWS云上使用Java
  10. java开发第一天上班_从第一天开始,如何成为一名优秀的团队合作伙伴,成为初级开发人员
  11. 大学学了一个学期的 C 语言,我们应该明白哪些知识点?别像没学一样!
  12. GitHub上Star 量最高的 5 个机器学习项目
  13. php 清除指定session,PHP如何操作指定的session?
  14. 2021江苏淮安高考成绩查询,2021江苏公务员考试成绩查询入口(淮安)
  15. spring boot项目下的application.properties中的logging.level设置日志级别
  16. 成功的CMMI过程定义
  17. 人工神经网络----Hebbian学习规则
  18. 开机显示erro:file'/boot/grub/i386-pc/normal.mod' not解决
  19. 怎样用一个3升的杯子和一个5升的杯子装出4升水来(杯子没有刻度)?
  20. NSRunLoop中Autorelease pool 管理

热门文章

  1. 管家婆软件安装常见问题详解!
  2. Illustrator中纸杯扇形做法
  3. 化妆步骤!! - 生活至上,美容至尚!
  4. Android Studio 项目异常问题汇总
  5. 2.6 基于ARDUINO UNO+MC20的路径显示功能
  6. Graphics.MeasureString 不能获得精确宽度的问题
  7. 运维人生攻城狮第八次搬家
  8. 设计一个对银行账户余额操作的程序
  9. java装饰模式的uml图_Java装饰模式
  10. 3 种生成高强度密码的方法