[BJOI2019]勘破神机

推式子好题

m=2,斐波那契数列,$f_{n+1}$项

不妨$++l,++r$,直接求$f_n$

求$\sum C(f_n,k)$,下降幂转化成阶乘幂,这样都是多项式了,方便交换求和号

最后面的斐波那契数列用通项公式求。二项式展开。

交换求和号之后,枚举i,j 最后一项是等比数列求和。

%rqy

m=3,

n为奇数是0

n是偶数时,令n=n/2 递推公式:$g_n=4\times g_{n-1}+g_{n-2}$

证明:枚举从后往前第一个完全分出的块,除了块长为2的方案额外多一个外,其它都是两种。$g_n=g_{n-1}+2\times \sum_{i=0}^{n-1} g_{i}$

再写出:$g_{n-1}=g_{n-2}+2\times \sum_{i=0}^{n-2} g_{i}$两式做差移项即可得到。

用特征方程可以解得$g_n$的通项公式

$\sqrt 5$在mod 998244353下不存在,可以用$a+b\sqrt5$形式表示

注意,等比数列求和:$1+Q+....+Q^n=\frac{1-Q^{n+1}}{1-Q}$注意是n+1,因为有n+1项

#include<bits/stdc++.h>
#define reg register int
#define il inline
#define fi first
#define se second
#define mk(a,b) make_pair(a,b)
#define numb (ch^'0')
using namespace std;
typedef long long ll;
template<class T>il void rd(T &x){
char ch;x=;bool fl=false;
while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);
for(x=numb;isdigit(ch=getchar());x=x*+numb);
(fl==true)&&(x=-x);
}
template<class T>il void output(T x){if(x/)output(x/);putchar(x%+'');}
template<class T>il void ot(T x){if(x<) putchar('-'),x=-x;output(x);putchar(' ');}
template<class T>il void prt(T a[],int st,int nd){for(reg i=st;i<=nd;++i) ot(a[i]);putchar('\n');} namespace Miracle{
const int mod=;
const int N=;
int C;
int ad(int x,int y){
return x+y>=mod?x+y-mod:x+y;
}
int mul(int x,int y){
return (ll)x*y%mod;
}
ll qm(ll x,ll y){
ll ret=;
while(y){
if(y&) ret=mul(ret,x);
x=mul(x,x);
y>>=;
}
return ret;
}
int inv[+];
int ni(int x){
// cout<<" ni x "<<x<<endl;
return x<=?inv[x]:qm(x,mod-);
}
struct po{
int a,b;
po(){
a=;b=;
}
po(int aa,int bb){
a=aa;b=bb;
}
po friend operator +(po a,po b){
return po(ad(a.a,b.a),ad(a.b,b.b));
}
po friend operator -(po a,po b){
return po(ad(a.a,mod-b.a),ad(a.b,mod-b.b));
}
po friend operator ~(po a){
int mom=ni(ad(mul(a.a,a.a),mod-mul(C,mul(a.b,a.b))));
// cout<<" mom "<<mom<<endl;
return po(mul(a.a,mom),ad(,mod-mul(a.b,mom)));
}
po friend operator -(po a){
return po(ad(,mod-a.a),ad(,mod-a.b));
}
po friend operator *(po a,po b){
return po(ad(mul(a.a,b.a),mul(mul(a.b,b.b),C)),ad(mul(a.a,b.b),mul(a.b,b.a)));
}
po friend operator *(po a,int c){
return po(mul(a.a,c),mul(a.b,c));
}
po friend operator /(po a,po b){
return a*(~b);
}
void op(){
cout<<" a "<<a<<" b "<<b<<endl;
}
}A,B,X,Y,mi[N][];
po qm(po x,ll y){
po ret;ret.a=;
while(y){
if(y&) ret=ret*x;
x=x*x;
y>>=;
}
return ret;
}
po calc(po Q,ll n){
// Q.op();
if(Q.a==&&Q.b==){
return po((n+)%mod,);
}
po tmp=Q;tmp=qm(tmp,n+);
tmp=-tmp;tmp.a=ad(tmp.a,);
Q=-Q;Q.a=ad(Q.a,);
// Q.op();
// Q=~Q;
// Q.op();
return tmp*(~Q);
}
int s[N][N],c[N][N];
int main(){
int t;rd(t);int m;rd(m);
inv[]=;
for(reg i=;i<=;++i){
inv[i]=mul(mod-mod/i,inv[mod%i]);
}
if(m==) {
C=;A=po(,ni());B=po(,mod-ni());
X=po(ni(),ni());Y=po(ni(),mod-ni());
}
else {
C=;A=po(ni(),ni());B=po(ni(),mod-ni());
X=po(,);Y=po(,mod-);
}
mi[][]=mi[][]=mi[][]=mi[][]=po(,);
for(reg i=;i<=;++i){
mi[i][]=mi[i-][]*A;
mi[i][]=mi[i-][]*B;
mi[i][]=mi[i-][]*X;
mi[i][]=mi[i-][]*Y;
} s[][]=;
for(reg i=;i<=;++i){
for(reg j=;j<=;++j){
s[i][j]=ad(mul(s[i-][j],i-),s[i-][j-]);
}
}
c[][]=;
for(reg i=;i<=;++i){
c[i][]=;
for(reg j=;j<=;++j){
c[i][j]=ad(c[i-][j-],c[i-][j]);
}
} ll l,r,k;
while(t--){
rd(l);rd(r);rd(k);
if(m==) {
++l,++r;
po ans;
for(reg i=;i<=k;++i){
// cout<<" i "<<i<<endl;
po tmp;
for(reg j=;j<=i;++j){
// cout<<" jj "<<j<<endl;
tmp=tmp+mi[j][]*mi[i-j][]*(calc(mi[j][]*mi[i-j][],r)-calc(mi[j][]*mi[i-j][],l-))*c[i][j];
// cout<<" bac "<<endl;
}
if((k-i)&) tmp=-tmp;
ans=ans+(tmp*s[k][i]);
}
for(reg i=;i<=k;++i) ans=ans*inv[i];
ans=ans*qm((r-l+)%mod,mod-); printf("%d\n",ans.a);
}
else{
ll L=l,R=r;
l=(l+)/,r=r/;
po ans;
for(reg i=;i<=k;++i){
// cout<<" i "<<i<<endl;
po tmp;
for(reg j=;j<=i;++j){
// cout<<" jj "<<j<<endl;
tmp=tmp+mi[j][]*mi[i-j][]*(calc(mi[j][]*mi[i-j][],r)-calc(mi[j][]*mi[i-j][],l-))*c[i][j];
// cout<<" bac "<<endl;
}
if((k-i)&) tmp=-tmp;
ans=ans+(tmp*s[k][i]);
}
for(reg i=;i<=k;++i) ans=ans*inv[i];
ans=ans*qm((R-L+)%mod,mod-); // ans.op();
printf("%d\n",ans.a);
}
}
return ;
} }
signed main(){
Miracle::main();
return ;
} /*
Author: *Miracle*
*/

[BJOI2019]勘破神机的更多相关文章

  1. [BJOI2019]勘破神机(斯特林数,数论)

    [BJOI2019]勘破神机(斯特林数,数论) 题面 洛谷 题解 先考虑\(m=2\)的情况. 显然方案数就是\(f_i=f_{i-1}+f_{i-2}\),即斐波那契数,虽然这里求出来是斐波那契的第 ...

  2. luogu P5320 [BJOI2019]勘破神机

    传送门 首先我们要知道要求什么.显然每次放方块要放一大段不能从中间分开的部分.设\(m=2\)方案为\(f\),\(m=3\)方案为\(g\),\(m=2\)可以放一个竖的,或者两个横的,所以\(f_ ...

  3. [BJOI2019]勘破神机(斯特林数+二项式定理+数学)

    题意:f[i],g[i]分别表示用1*2的骨牌铺2*n和3*n网格的方案数,求ΣC(f(i),k)和ΣC(g(i),k),对998244353取模,其中l<=i<=r,1<=l< ...

  4. #loj3090 [BJOI2019] 勘破神机

    简单线性代数练习题 首先翻开具体数学生成函数一章,可以发现\(F(n),G(n)\)满足以下递推式 \[F(n)=F(n-1)+F(n-2),F(0)=1,F(1)=1\] \[G(n)=4G(n-2 ...

  5. [BJOI2019]勘破神机(第一类斯特林数,斐波那契数列)

    真的是好题,只不过强行多合一有点过分了…… 题目大意: $T$ 组数据.每个测试点中 $m$ 相同. 对于每组数据,给定 $l,r,k$,请求出 $\dfrac{1}{r-l+1}\sum\limit ...

  6. 题解 P5320 - [BJOI2019]勘破神机(推式子+第一类斯特林数)

    洛谷题面传送门 神仙题(为什么就没能自己想出来呢/zk/zk) 这是我 AC 的第 \(2\times 10^3\) 道题哦 首先考虑 \(m=2\) 的情况,我们首先可以想到一个非常 trivial ...

  7. 【LOJ】#3090. 「BJOI2019」勘破神机

    LOJ#3090. 「BJOI2019」勘破神机 为了这题我去学习了一下BM算法.. 很容易发现这2的地方是\(F_{1} = 1,F_{2} = 2\)的斐波那契数列 3的地方是\(G_{1} = ...

  8. loj 3090 「BJOI2019」勘破神机 - 数学

    题目传送门 传送门 题目大意 设$F_{n}$表示用$1\times 2$的骨牌填$2\times n$的网格的方案数,设$G_{n}$$表示用$1\times 2$的骨牌填$3\times n$的网 ...

  9. LOJ 3090 「BJOI2019」勘破神机——斯特林数+递推式求通项+扩域

    题目:https://loj.ac/problem/3090 题解:https://www.luogu.org/blog/rqy/solution-p5320 1.用斯特林数把下降幂化为普通的幂次求和 ...

随机推荐

  1. c++模板特化偏特化

    模板为什么要特化,因为编译器认为,对于特定的类型,如果你对某一功能有更好地实现,那么就该听你的. 模板分为类模板与函数模板,特化分为全特化与偏特化.全特化就是限定死模板实现的具体类型,偏特化就是模板如 ...

  2. 章节九、2-使用firefoxdriver浏览器进行自动化测试

    一.演示如何使用火狐浏览器打开“百度” package basicweb; import org.openqa.selenium.WebDriver; import org.openqa.seleni ...

  3. Spring MVC 表单校验 (七)

    完整的项目案例: springmvc.zip 目录 实例 除了依赖spring-webmvc还需要依赖jackson-databind(用于转换json数据格式)和hibernate-validato ...

  4. bug管理工具之禅道的测试模块的使用

    https://www.cnblogs.com/evablogs/p/6785017.html 角色:产品经理PO,项目经理PM,开发,测试 测试任务: bug: 1.维护bug视图模块:[测试]-[ ...

  5. SQLServer之创建分布式事务

    分布式事务创建注意事项 指定一个由 Transact-SQL 分布式事务处理协调器 (MS DTC) 管理的 Microsoft 分布式事务的起点. 执行 BEGIN DISTRIBUTED TRAN ...

  6. NSTimer 不工作 不调用方法

    比如,定义一个NSTimer来隔一会调用某个方法,但这时你在拖动textVIew不放手,主线程就被占用了.timer的监听方法就不调用,直到你松手,这时把timer加到 runloop里,就相当于告诉 ...

  7. Python面试笔记一

    目录 一.MySQL(30题) 二.django(15题) 三.Python部分(46题) 四.RESTful API设计指南(7题) 五.补充 一.MySQL(30题) 1.mysql如何做分页 m ...

  8. PyCharm使用小技巧

    本文部分内容参考了明宇李前辈的博客,原文请阅读 Pycharm的配置(背景颜色,字体,解释器等): 鼠标滑轮控制字体大小 部分参考了墨颜前辈的博客,原文请阅读 用鼠标滑轮控制代码字体大小: 感谢各位前 ...

  9. Java Api Consumer 连接启用Kerberos认证的Kafka

    java程序连接到一个需要Kerberos认证的kafka集群上,消费生产者生产的信息,kafka版本是2.10-0.10.0.1: Java程序以maven构建,(怎么构建maven工程,可去问下度 ...

  10. 浏览器和服务器实现跨域(CORS)判定的原理

    前端对Cross-Origin Resource Sharing 问题(CORS,中文又称'跨域')应该很熟悉了.众所周知出于安全的考虑,浏览器有个同源策略,对于不同源的站点之间的相互请求会做限制(跨 ...