[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. 面板JPanel,滚动面板JScrollPane,文本域JTextArea

    [面板JPanel] 面板就是一个容器 每一个容器都可以有一个自己的独立的布局和组件,这些容器之间也不会互相干扰 //导入Java类 import javax.swing.*; import java ...

  2. Andriod Studio安装教程

    最近开设安卓课程,无奈于开发团队不再更新eclipse上sdk兼容问题,在eclipse上浪费了两天时间,换了Andriod Studio, Andriod Studio下载网址:http://www ...

  3. Android + https 实现 文件上传

    package com.example.wbdream.zigvine; import android.annotation.SuppressLint; import android.app.Acti ...

  4. 在MongoDB中创建一个索引而性能提升1000倍的小例子

    在https://www.cnblogs.com/xuliuzai/p/9965229.html的博文中我们介绍了MongoDB的常见索引的创建语法.部分同学还想看看MongoDB的威力到底有多大,所 ...

  5. MySQL常用命令汇总(偏向运维管理)

    基础部分 1. select @@version; ##查询当前mysql的版本. 2. show variables like 'port';##查看mysql实例的端口. 3. show vari ...

  6. 简说raid1 raid2 raid5 raid6 raid10的优缺点和做各自raid需要几块硬盘

    Raid 0:一块硬盘或者以上就可做raid0优势:数据读取写入最快,最大优势提高硬盘容量,比如3快80G的硬盘做raid0 可用总容量为240G.速度是一样.缺点:无冗余能力,一块硬盘损坏,数据全无 ...

  7. Expression

    表达式目录树 1.什么是表达式目录树Expression? 表达式目录树是一个数据结构,语法树. 首先我们去看看 Expressions类 ,定义了一个泛型委托类型 TDelegate: // 摘要: ...

  8. Windows 下安装drozer(Windows 10),连接手机(红米note4X)

    Windows 下安装drozer(Windows 10),连接手机(红米note4X) 首先下载drozer(http://mwr.to/drozer). 红米手机开发者模式 遇到第一个问题,红米手 ...

  9. 英语进阶系列-A06-本周总结

    本周总结 目录Content 英语进阶系列-A01-再别康桥 英语进阶系列-A02-英语学习的奥秘 英语进阶系列-A03-英语升级练习一 英语进阶系列-A04-英语升级练习二 英语进阶系列-A05-英 ...

  10. nuxt axios代理

    modules: [ '@nuxtjs/axios', ], axios: { //prefix: '/api/', proxy: true // Can be also an object with ...