传送门

题解可以参见zjjzjjzjj神仙的,写的很清楚。

代码:

#include<bits/stdc++.h>
#define ri register int
using namespace std;
typedef long long ll;
const int mod=1e9+7;
inline int add(const int&a,const int&b){return a+b>=mod?a+b-mod:a+b;}
inline int dec(const int&a,const int&b){return a>=b?a-b:a-b+mod;}
inline int mul(const int&a,const int&b){return (ll)a*b%mod;}
inline void update(int&a,const int&b){a=add(a,b);}
inline void modify(int&a,const int&b){a=dec(a,b);}
int ans,f[2][1<<12|5][13][13],n,m,c,q,a[13],fail[2][13],trans[2][13][3],tmp;
char s[13];
inline int idx(const char&x){return x=='W'?0:(x=='B'?1:2);}
int main(){
	scanf("%d%d%d%d",&n,&m,&c,&q);
	while(q--){
		for(ri tt=0;tt<2;++tt){
			scanf("%s",s+1);
			for(ri i=1;i<=c;++i)a[i]=idx(s[i]);
			for(ri i=1,j=0;i<=c;++i){
				while(j&&s[i+1]!=s[j+1])j=fail[tt][j];
				s[i+1]==s[j+1]?fail[tt][i+1]=++j:fail[tt][i+1]=0;
			}
			for(ri k,i=0;i<c;++i)for(ri j=0;j<3;++j){
				for(k=i;k&&a[k+1]!=j;k=fail[tt][k]);
				trans[tt][i][j]=a[k+1]==j?k+1:0;
			}
		}
		memset(f[0],0,sizeof(f[0]));
		ans=f[0][0][0][0]=1,tmp=1;
		for(ri i=1;i<=n;++i){
			memset(f[tmp],0,sizeof(f[tmp]));
			for(ri j=0,up=1<<(m-c+1);j<up;++j)for(ri k=0;k<c;++k)for(ri l=0;l<c;++l)update(f[tmp][j][0][0],f[tmp^1][j][k][l]);
			tmp^=1;
			for(ri j=1;j<=m;++j,tmp^=1){
				ans=mul(ans,3);
				memset(f[tmp],0,sizeof(f[tmp]));
				for(ri sta=0,up=1<<(m-c+1);sta<up;++sta)for(ri k=0;k<c;++k)for(ri l=0;l<c;++l){
					if(!f[tmp^1][sta][k][l])continue;
					for(ri a,b,ns,t=0;t<3;++t){
						a=trans[0][k][t],b=trans[1][l][t],ns=sta;
						if(j>=c&&((sta>>(j-c))&1))ns^=1<<(j-c);
						if(a==c)ns^=1<<(j-c),a=fail[0][a];
						if(b==c){if((sta>>(j-c))&1)continue;b=fail[1][b];}
						update(f[tmp][ns][a][b],f[tmp^1][sta][k][l]);
					}
				}
			}
		}
		tmp^=1;
		for(ri i=0,up=1<<(m-c+1);i<up;++i)for(ri j=0;j<c;++j)for(ri k=0;k<c;++k)modify(ans,f[tmp][i][j][k]);
		cout<<ans<<'\n';
	}
	return 0;
}

2019.03.25 bzoj4572: [Scoi2016]围棋(轮廓线dp)的更多相关文章

  1. BZOJ.4572.[SCOI2016]围棋(轮廓线DP)

    BZOJ 洛谷 \(Description\) 给定\(n,m,c\).\(Q\)次询问,每次询问给定\(2*c\)的模板串,求它在多少个\(n*m\)的棋盘中出现过.棋盘的每个格子有三种状态. \( ...

  2. 4572: [Scoi2016]围棋 轮廓线DP KMP

    国际惯例的题面:这种题目显然DP了,看到M这么小显然要状压.然后就是具体怎么DP的问题.首先我们可以暴力状压上一行状态,然后逐行转移.复杂度n*3^m+3^(m*2),显然过不去. 考虑状态的特殊性, ...

  3. 2019.03.25 bzoj4568: [Scoi2016]幸运数字(倍增+线性基)

    传送门 题意:给你一棵带点权的树,多次询问路径的最大异或和. 思路: 线性基上树?? 倍增维护一下就完了. 时间复杂度O(nlog3n)O(nlog^3n)O(nlog3n) 代码: #include ...

  4. 2019.03.25 bzoj4567: [Scoi2016]背单词(trie+贪心)

    传送门 题意: 给你n个字符串,不同的排列有不同的代价,代价按照如下方式计算(字符串s的位置为x): 1.排在s后面的字符串有s的后缀,则代价为n^2: 2.排在s前面的字符串有s的后缀,且没有排在s ...

  5. [2019.03.25]Linux中的查找

    TMUX天下第一 全世界所有用CLI Linux的人都应该用TMUX,我爱它! ======================== 以下是正文 ======================== Linu ...

  6. BZOJ4572: [Scoi2016]围棋

    Description 近日,谷歌研发的围棋AI—AlphaGo以4:1的比分战胜了曾经的世界冠军李世石,这是人工智能领域的又一里程碑. 与传统的搜索式AI不同,AlphaGo使用了最近十分流行的卷积 ...

  7. 2019.01.24 bzoj3125: CITY(轮廓线dp)

    传送门 题意简述:给一个n∗mn*mn∗m的网格图,有的格子不能走,有的格子只能竖着走,有的格子只能横着走,问用一条回路覆盖所有能走的格子的方案数. 思路: 就是简单的轮廓线dpdpdp加了一点限制而 ...

  8. 2019.01.23 hdu3377 Plan(轮廓线dp)

    传送门 题意简述:给一个n*m的带权矩阵,求从左上角走到右下角的最大分数,每个格子只能经过最多一次,n,m≤9n,m\le9n,m≤9. 思路: 考虑轮廓线dpdpdp,但这道题并没有出现回路的限制因 ...

  9. ARTS Challenge- Week 1 (2019.03.25~2019.03.31)

    1.Algorithm - at least one leetcode problem per week(Medium+) 986. Interval List Intersections https ...

随机推荐

  1. JavaScript Array some() 方法

    some 判断数组中是否至少有一个元素满足条件 只要有一个满足就返回true 只有都不满足时才返回false 语法: array.some(function(value,index,array),th ...

  2. virtualbox下centos虚拟机安装,并网卡配置桥接方式上网,使得和host可以互Ping通。

    见:http://www.cnblogs.com/taoshiqian/p/7615993.html 注意: 1.host 主机什么都不要处理 2.将virtualbox 的对应虚拟机网络设置桥接 3 ...

  3. winform窗体运行时的大小和设计时不一致

    窗体设置的尺寸为1946*850,而电脑分辨率是1920*1280 按说宽度已经超过屏幕大小很多了,应该显示占满屏幕宽度才对,但是运行时宽度只有设计时的一半 高度最多只能是1946像素,再拉大也不管用 ...

  4. 原型设计工具—Axure

    作为软件设计的一员,需要在软件开发初期确保软件的具体内容,防止后期大幅度的修改. 在这样的情况下,原型设计软件就起到了关键的作用. 摘要: 原型设计为什么这么重要呢? 因为它帮助我们搭建了低保真或高保 ...

  5. 第一个spring简单的helloworld

    spring 是一个开源的框架 也是轻量级框架 1.导入jar包 spring的版本 4.0 目录: spring-framework-4.0.0.RELEASE-libs 下的jar  spring ...

  6. 显式Intent 和隐式 Intent 的区别

    显式 Intent : 在知道目标组件名称的前提下,去调用Intent.setComponent().Intent.setClassName()或Intent.setClass()方法或者在new I ...

  7. Android Studio 的 build 过程

    如图, 编译器将源代码(包括 Application Module 及其所依赖的所有 Library 源代码)转换成 DEX(Dalvik Executable)文件(其中包括运行在 Android ...

  8. Unexpected character '�' (1:0) while parsing file

    webpack打包,如果在html中有<img>标签,会打包不成功,因为找不到路径,所只要把图片放样式里就好了

  9. SpringMVC 使用PUT请求遇到的问题小结

    最近在使用REST风格的URL进行CURD操作的学习过程中 发现使用PUT请求时候提交表单进行修改操作 报错:Request method 'PUT' not supported 在网上查找资料发现是 ...

  10. servlet3异步原理与实践

    一.什么是Servlet servlet 是基于 Java 的 Web 组件,由容器进行管理,来生成动态内容.像其他基于 Java 的组件技术一样,servlet 也是基于平台无关的 Java 类格式 ...