Description

我们称一个仅由0、1构成的序列为"交错序列",当且仅当序列中没有相邻的1(可以有相邻的0)。例如,000,001

,101,都是交错序列,而110则不是。对于一个长度为n的交错序列,统计其中0和1出现的次数,分别记为x和y。

给定参数a、b,定义一个交错序列的特征值为xayb。注意这里规定任何整数的0次幂都等于1(包括0^0=1)。

显然长度为n的交错序列可能有多个。我们想要知道,所有长度为n的交错序列的特征值的和,除以m的余数。(m是

一个给定的质数)例如,全部长度为3的交错串为:000、001、010、100、101。

Solution

看到 \(x^ay^b\) 容易想到要展开,然后就发现变成了

\[y^b*\sum_{i=0}^{a}(-1)^{a-i}*C_{a}^{i}*n^{i}*y^{a-i}
\]

\[\sum_{i=0}^{a}(-1)^{a-i}*C_{a}^{i}*n^{i}*y^{a+b-i}
\]

这样就只需要统计 \(\sum y^{a+b-i}\) 了

\(f[i][j][0/1]\) 表示这一位填 \(0/1\) 的特征值的 \(j\) 次方之和

如果增加一个 \(1\),\(y^{j}\) 就要变成 \((y+1)^{j}\),二项式定理展开做个差

发现就是 \(\sum_{k=0}^{j-1}C_{j}^{k}*y^k\)

而 \(f[i][k]\) 就是 \(y^k\)

转移系数就确定了,矩阵快速幂优化一下就好了

千万不要像我一样拆成了 \(x^a*(n-x)^b\),转移复杂一些,常数大的过不去

#include<bits/stdc++.h>
using namespace std;
const int N=205;
int n,a,b,mod,c[N][N],m,d;
inline void priwork(){
for(int i=0;i<N;i++){
c[i][0]=1;
for(int j=1;j<=i;j++)c[i][j]=(c[i-1][j]+c[i-1][j-1])%mod;
}
}
struct mat{
int a[N][N];
mat(){}
inline mat operator *(const mat &p)const{
mat ret;
for(int i=0;i<m;i++)
for(int j=0;j<m;j++){
ret.a[i][j]=0;
for(int k=0;k<m;k++)
if(a[i][k] && p.a[k][j])
ret.a[i][j]=(ret.a[i][j]+1ll*a[i][k]*p.a[k][j])%mod;
}
return ret;
}
}S,T;
inline void solve(){
for(int i=0;i<d;i++){
T.a[i+d][i]=1;T.a[i][i]=1;
for(int j=i;j<d;j++)T.a[i][j+d]=c[j][i];
}
int k=n;
S.a[0][0]=1;
while(k){
if(k&1)S=S*T;
T=T*T;k>>=1;
}
}
int main(){
freopen("pp.in","r",stdin);
freopen("pp.out","w",stdout);
int ans=0;
memset(S.a,0,sizeof(S.a));memset(T.a,0,sizeof(T.a));
cin>>n>>a>>b>>mod;d=a+b+1;m=d*2;
priwork();solve();
for(int i=0;i<d;i++)S.a[0][i]=(S.a[0][i]+S.a[0][i+d])%mod;
for(int i=0,t=1;i<=a;i++,t=1ll*t*n%mod)
ans=(ans+1ll*((a-i)&1?-1:1)*c[a][i]*t%mod*S.a[0][a+b-i])%mod;
if(ans<0)ans+=mod;
cout<<ans<<endl;
return 0;
}

bzoj 5298: [Cqoi2018]交错序列的更多相关文章

  1. 【BZOJ5298】[CQOI2018]交错序列(动态规划,矩阵快速幂)

    [BZOJ5298][CQOI2018]交错序列(动态规划,矩阵快速幂) 题面 BZOJ 洛谷 题解 考虑由\(x\)个\(1\)和\(y\)个\(0\)组成的合法串的个数. 显然就是把\(1\)当做 ...

  2. [CQOI2018]交错序列 (矩阵快速幂,数论)

    [CQOI2018]交错序列 \(solution:\) 这一题出得真的很好,将原本一道矩阵快速幂硬生生加入组合数的标签,还那么没有违和感,那么让人看不出来.所以做这道题必须先知道(矩阵快速幂及如何构 ...

  3. BZOJ5298 CQOI2018 交错序列 【DP+矩阵快速幂优化】*

    BZOJ5298 CQOI2018 交错序列 [DP+矩阵快速幂优化] Description 我们称一个仅由0.1构成的序列为"交错序列",当且仅当序列中没有相邻的1(可以有相邻 ...

  4. bzoj 5301: [Cqoi2018]异或序列 (莫队算法)

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=5301 题面; 5301: [Cqoi2018]异或序列 Time Limit: 10 Sec ...

  5. [CQOI2018]交错序列

    嘟嘟嘟 要是求交错序列的个数和就好了,那我一秒就能切. 换成这个,我就不会了. 我一直想枚举1的个数,然后算出在长度为\(n\)的序列里,有多少个合法的序列,然后又觉得这好像是什么插板法,但是每一个盒 ...

  6. BZOJ5298 CQOI2018交错序列(动态规划+矩阵快速幂)

    显然答案为Σkb·(n-k)a·C(n-k+1,k).并且可以发现ΣC(n-k,k)=fibn.但这实际上没有任何卵用. 纯组合看起来不太行得通,换个思路,考虑一个显然的dp,即设f[i][j][0/ ...

  7. bzoj 5301 [Cqoi2018]异或序列 莫队

    5301: [Cqoi2018]异或序列 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 204  Solved: 155[Submit][Status ...

  8. bzoj 5297: [Cqoi2018]社交网络

    Description 当今社会,在社交网络上看朋友的消息已经成为许多人生活的一部分.通常,一个用户在社交网络上发布一条消息 (例如微博.状态.Tweet等)后,他的好友们也可以看见这条消息,并可能转 ...

  9. BZOJ5298 [CQOI2018] 交错序列 | 矩阵乘法和一个trick

    题面 求所有长度为\(n\)的.没有相邻的1的01序列中,若0有\(x\)个.1有\(y\)个,\(x^ay^b\)之和(对\(m\)取模). \(n \le 10^7, m \le 10^8, 0 ...

随机推荐

  1. 小规模kvm宿主机管理-webvirtmgr安装

    1.前言WebVirtMgr是近两年来发展较快,比较活跃,非常清新的一个KVM管理平台,提供对宿主机和虚机的统一管理,它有别于kvm自带的图形管理工具(virtual machine manager) ...

  2. kubernetes dashboard 安装

    环境:CentOS Linux release 7.3.1611 (Core)IP:192.168.0.103 [1]组件安装yum install device-mapperyum install ...

  3. CHNetRequest网络请求

    Paste JSON as Code • quicktype 软件的使用 iOS开发:官方自带的JSON使用 JSON 数据解析 XML 数据解析 Plist 数据解析 NetRequest 网络数据 ...

  4. vmware实现物理机和虚拟机复制粘贴

    要实现物理机和虚拟机的复制粘贴需要安装VMware Tools. 1.点击菜单栏--虚拟机--安装VMware Tools. 2.打开linux终端,进入/media/VMware Tools目录. ...

  5. hadoop计算二度人脉关系推荐好友

    https://www.jianshu.com/p/8707cd015ba1 问题描述: 以下是qq好友关系,进行好友推荐,比如:老王和二狗是好友 , 二狗和春子以及花朵是好友,那么老王和花朵 或者老 ...

  6. easyui打开dialog后给弹出框内输入框赋值问题

    在写一个弹出页面的时候,里面有一些输入框,需要在弹出的时候从数据库取值并且赋值,刚开始在弹出的时候使用$(id).val(value),结果赋值失败,为空当时纠结了一会,然后突然想到在easyui打开 ...

  7. python中xml解析

    import xml.dom.minidom input_xml_string = '''<root><a>hello</a></root>'''#打开 ...

  8. Android--Apache HttpClient 的一些问题

    1,对于Android4.0之上的环境下,不能在主线程中访问网络    http://www.cnblogs.com/plokmju/p/Android_apacheHttpClient.html   ...

  9. iOS开发时间戳与时间NSDate,时区的转换,汉字与UTF8,16进制的转换

    http://blog.sina.com.cn/s/blog_68661bd80101njdo.html 标签: ios时间戳 ios开发时间戳 ios16进制转中文 ios开发utf8转中文 ios ...

  10. rest-assured的日志使用介绍

    在许多测试用例当中,为了帮助我们创建正确的断言和发送正确的请求,打印出详细的响应和请求数据是非常有用的.为此我们可以使用rest-assured提供的预定义过滤器或者使用其中的一些快捷方法. 一.请求 ...