[CC-BSTRLCP]Count Binary Strings
[CC-BSTRLCP]Count Binary Strings
题目大意:
对于一个长度为\(n\)的\(\texttt0/\texttt1\)串\(S\),如果存在一个切分\(i\),使得\(S_{[1,i]}\)与\(S_{[i+1,n]}\)的LCP长度\(>k\),那么称\(i\)是\(S\)的精准切分。
如果\(S\)至少有\(m\)个精准切分,那么称\(S\)是一个切分串。
给定\(n,k,m\),求有多少长度为\(n\)的切分串。
- \(1\le T\le 5\)
- \(1\le n\le50\)
- \(0\le m\le n-1\)
- \(0\le k\le \min(10,n)\)
思路:
枚举前\(k\)位的状态\(s\),\(f[i][j][k]\)表示考虑到第\(i\)位,已经有\(j\)个精准切分,最后匹配的长度为\(k\)的方案数。
预处理每种后缀能匹配\(s\)的多长的前缀,转移时枚举最后加上\(0\)还是\(1\)即可。
时间复杂度\(\mathcal O(4^kk+2^kn^2k)\)。
源代码:
#include<cstdio>
#include<cctype>
#include<cstring>
#include<algorithm>
inline int getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int x=ch^'0';
while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
return x;
}
typedef long long int64;
const int N=51,K=11,M=1024,mod=1e9+7;
int f[2][N][K],g[M][K];
inline void upd(int &a,const int &b) {
(a+=b)%=mod;
}
int main() {
for(register int T=getint();T;T--) {
const int n=getint(),k=getint(),m=getint();
if(k==0) {
printf("%lld\n",(1ll<<n)%mod);
continue;
}
if(m+1==n||k*2>n) {
puts("0");
continue;
}
const int all=(1<<k)-1;
int ans=0;
for(register int s=0;s<=all/2;s++) {
int p[k+1];
for(register int i=0,t=s;i<=k;i++) {
p[k-i]=t;
t>>=1;
}
memset(f[0],0,sizeof f[0]);
for(register int t=0;t<=all;t++) {
for(register int i=1;i<=k;i++) {
int l;
for(l=i;l;l--) {
if(p[l]==(t&((1<<l)-1))) break;
}
g[t][i]=l;
}
f[0][t==s][g[t][k]]++;
}
for(register int i=k*2+1;i<=n;i++) {
const bool cur=i&1;
memset(f[cur],0,sizeof f[cur]);
for(register int j=0;j<=i;j++) {
for(register int i=0;i<=k;i++) {
for(register int b=0;b<2;b++) {
const int t=((p[i]<<1)|b)&all;
const int l=g[t][std::min(i+1,k)];
upd(f[cur][j+(l==k)][l],f[!cur][j][i]);
}
}
}
}
for(register int j=m+1;j<=n;j++) {
for(register int i=0;i<=k;i++) {
(ans+=f[n&1][j][i])%=mod;
}
}
}
printf("%d\n",(ans<<1)%mod);
}
return 0;
}
[CC-BSTRLCP]Count Binary Strings的更多相关文章
- 【Leetcode_easy】696. Count Binary Substrings
problem 696. Count Binary Substrings 题意:具有相同个数的1和0的连续子串的数目: solution1:还不是特别理解... 遍历元数组,如果是第一个数字,那么对应 ...
- A. You Are Given Two Binary Strings…
A. You Are Given Two Binary Strings… You are given two binary strings x and y, which are binary repr ...
- 696. Count Binary Substrings - LeetCode
Question 696. Count Binary Substrings Example1 Input: "00110011" Output: 6 Explanation: Th ...
- [LeetCode] Count Binary Substrings 统计二进制子字符串
Give a string s, count the number of non-empty (contiguous) substrings that have the same number of ...
- 696. Count Binary Substrings统计配对的01个数
[抄题]: Give a string s, count the number of non-empty (contiguous) substrings that have the same numb ...
- LeetCode Count Binary Substrings
原题链接在这里:https://leetcode.com/problems/count-binary-substrings/description/ 题目: Give a string s, coun ...
- [Swift]LeetCode696. 计数二进制子串 | Count Binary Substrings
Give a string s, count the number of non-empty (contiguous) substrings that have the same number of ...
- LeetCode算法题-Count Binary Substrings(Java实现)
这是悦乐书的第293次更新,第311篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第161题(顺位题号是696).给定一个字符串s,计算具有相同数字0和1的非空且连续子串 ...
- LeetCode 696 Count Binary Substrings 解题报告
题目要求 Give a string s, count the number of non-empty (contiguous) substrings that have the same numbe ...
随机推荐
- 跨域 jQuery库ajax请求
XMLHttpRequest是原生ajax,缺点是使用起来比较繁琐. jQuery库提供了一组简洁的ajax请求方法. ajax() get() post() 具体使用参考官方API: http:// ...
- 20165206 2017-2018-2 《Java程序设计》第9周学习总结
20165206 2017-2018-2 <Java程序设计>第9周学习总结 教材学习内容总结 URL类:URL类是java.net包中的一个重要的类,使用URL创建对象的应用程序称为客户 ...
- OpenCV-Python入门教程4-颜色空间转换
一.颜色空间转换 import cv2 import numpy as np img = cv2.imread('lena.jpg') # 转换成灰度图 img_gray = cv2.cvtColor ...
- rabbitmq3.7.5 centos7 集群部署笔记
1. 准备3台 centos服务器 192.168.233.128 192.168.233.130 192.168.233.131 防火墙放开 集群端口, 这里一并把所有rabbitmq ...
- Temporal Action Detection with Structured Segment Networks (ssn)【转】
Action Recognition: 行为识别,视频分类,数据集为剪辑过的动作视频 Temporal Action Detection: 从未剪辑的视频,定位动作发生的区间,起始帧和终止帧并预测类别 ...
- 【回顾】html简介、基础、元素
1.简介 什么是HTML? HTML 是用来描述网页的一种语言. HTML 指的是超文本标记语言: HyperText Markup Language HTML 不是一种编程语言,而是一种标记语言 标 ...
- BZOJ5084[hashit]
题解: 后缀自动机 我们可以通过建立trie 把询问变成询问一些点的并 把trie建立成SAM和广义SAM基本相同,就是在父亲和儿子之间连边 然后就变成了询问树链的并 我们可以发现答案=sigma d ...
- 构建简单的json树形菜单
json结构: var Menu = [{ tit:"一级菜单", submenu:[{ tit:"二级菜单", url:"", func: ...
- BZOJ1911 [Apio2010]特别行动队 - 动态规划 - 斜率优化
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 UPD(2018-04-01):用Latex重打了公式…… 题意概括 把一个整数序列划分成任意连续的段,使得划分出 ...
- ORA-12154: TNS: 无法解析指定的连接标识符 问题
ORA-12154: TNS: 无法解析指定的连接标识符 问题:https://zhidao.baidu.com/question/397519550.html