题目来源:NOI2018模拟测试赛(二十六)

题解:

首先由于这是个01串,所以反对称串的意思就是这个字符串的后半部分是前半部分的反转且翻转结果;

一个串出现有三种情况:在前半部分,在后半部分或穿过中间;

对于前两种情况,由于n很小,可以直接在AC自动机跑状压DP,对于第三种情况特殊处理一下,就是对于所有子串的所有前缀,判断以这个前缀为结尾能否构造出这个串,有则累加答案就好了,具体见代码。

代码:

 #include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
#define inf 2147483647
#define eps 1e-9
#define mod 998244353
using namespace std;
typedef long long ll;
typedef double db;
struct ac{
int fa,fail,son[],s,t;
}t[];
int n,m,nw,tmp,ans=,len,cnt=,num[],f[][][];
char s[];
void ins(char *s,int len,int id){
int nw=;
for(int i=;i<=len;i++){
if(!t[nw].son[s[i]-'']){
t[nw].son[s[i]-'']=++cnt;
num[cnt]=s[i]-'';
t[cnt].fa=nw;
}
nw=t[nw].son[s[i]-''];
}
t[nw].s|=(<<id-);
}
void AC(){
queue<int>q;
for(int i=;i<=;i++){
if(t[].son[i]){
q.push(t[].son[i]);
t[t[].son[i]].fail=;
}
}
while(!q.empty()){
int u=q.front();
q.pop();
t[u].s|=t[t[u].fail].s;
for(int i=;i<=;i++){
if(t[u].son[i]){
t[t[u].son[i]].fail=t[t[u].fail].son[i];
q.push(t[u].son[i]);
}else t[u].son[i]=t[t[u].fail].son[i];
}
}
}
int getfa(int u){
int ret=;
for(int nw=u;nw;nw=t[nw].fa){
u=t[u].son[num[nw]^];
ret|=t[u].s;
}
return ret;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
scanf("%s",s+);
len=strlen(s+);
ins(s,len,i);
reverse(s+,s+len+);
for(int j=;j<=len;j++){
s[j]=((s[j]-'')^)+'';
}
ins(s,len,i);
}
AC();
f[][][]=;
for(int tt=;tt<=m;tt++){
nw^=;
memset(f[nw],,sizeof(f[nw]));
for(int i=;i<=cnt;i++){
for(int j=;j<(<<n);j++){
for(int k=;k<=;k++){
f[nw][t[i].son[k]][j|t[t[i].son[k]].s]=(f[nw][t[i].son[k]][j|t[t[i].son[k]].s]+f[nw^][i][j])%mod;
}
}
}
}
for(int i=;i<=cnt;i++){
tmp=getfa(i);
for(int j=;j<(<<n);j++){
if((tmp|j)==(<<n)-){
ans=(ans+f[nw][i][j])%mod;
}
}
}
printf("%d",ans);
return ;
}

【XSY2989】字符串的更多相关文章

  1. Python高手之路【六】python基础之字符串格式化

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

  2. 测试一下StringBuffer和StringBuilder及字面常量拼接三种字符串的效率

    之前一篇里写过字符串常用类的三种方式<java中的字符串相关知识整理>,只不过这个只是分析并不知道他们之间会有多大的区别,或者所谓的StringBuffer能提升多少拼接效率呢?为此写个简 ...

  3. java中的字符串相关知识整理

    字符串为什么这么重要 写了多年java的开发应该对String不陌生,但是我却越发觉得它陌生.每学一门编程语言就会与字符串这个关键词打不少交道.看来它真的很重要. 字符串就是一系列的字符组合的串,如果 ...

  4. JavaScript 字符串实用常操纪要

    JavaScript 字符串用于存储和处理文本.因此在编写 JS 代码之时她总如影随形,在你处理用户的输入数据的时候,在读取或设置 DOM 对象的属性时,在操作 Cookie 时,在转换各种不同 Da ...

  5. Java 字符串格式化详解

    Java 字符串格式化详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. 在 Java 的 String 类中,可以使用 format() 方法 ...

  6. Redis的简单动态字符串实现

    Redis 没有直接使用 C 语言传统的字符串表示(以空字符结尾的字符数组,以下简称 C 字符串), 而是自己构建了一种名为简单动态字符串(simple dynamic string,sds)的抽象类 ...

  7. ASP.NET加密和解密数据库连接字符串

    大家知道,在应用程序中进行数据库操作需要连接字符串,而如果没有连接字符串,我们就无法在应用程序中完成检索数据,创建数据等一系列的数据库操作.当有人想要获取你程序中的数据库信息,他首先看到的可能会是We ...

  8. Javascript正则对象方法与字符串正则方法总结

    正则对象 var reg = new Regexp('abc','gi') var reg = /abc/ig 正则方法 test方法(测试某个字符串是否匹配) var str = 'abc123'; ...

  9. 微信小程序中利用时间选择器和js无计算实现定时器(将字符串或秒数转换成倒计时)

    转载注明出处 改成了一个单独的js文件,并修改代码增加了通用性,点击这里查看 今天写小程序,有一个需求就是用户选择时间,然后我这边就要开始倒计时. 因为小程序的限制,所以直接选用时间选择器作为选择定时 ...

随机推荐

  1. Codeforces 787A The Monster( 拓展欧几里德 )

    链接:传送门 题意:ok 题意略 思路:将问题转化成求 b + a * x = d + c * y,简单拓欧,但是需要注意的是 x >= 0 且 y >= 0 /************* ...

  2. [poj 3318] Matrix Multiplication (随机化+矩阵)

    Description You are given three n × n matrices A, B and C. Does the equation A × B = C hold true? In ...

  3. [luogu P2590 ZJOI2008] 树的统计 (树链剖分)

    题目描述 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w. 我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结点u的权值改为t II. QMAX u ...

  4. Python-基础-day3

    基础数据类型 1.什么是数据类型? 我们人类可以很容易的分清数字与字符的区别,但是计算机并不能呀,计算机虽然很强大,但从某种角度上看又很傻,除非你明确的告诉它,1是数字,“汉”是文字,否则它是分不清1 ...

  5. 仿照CIFAR-10数据集格式,制作自己的数据集

    本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50801226 前一篇博客:C/C++ ...

  6. Strtus配置Tomcat出现问题

    在使用 eclipse 过程中,如果你加入了某些自定义的框架(比如 struts)后,在启动 services 后, 控制台出现一片红色的字样,表明有问题.这时仔细查看 eclipse 控制台信息, ...

  7. BA--近零能耗示范楼(西门子-中国建筑科学研究院院内)

    中国建筑科学研究院院内的一栋办公楼使用了西门子的全套楼控.节能.消防.远景开关面板技术,每年的能耗为25kwh,远低于国家绿色能源标准.

  8. 洛谷 U249 匹配

    U249 匹配 题目描述 输入整数s和两个整数集合A和B,从这A和B中各取一个数,如果它们的和等于s,称为“匹配”.编程统计匹配的总次数 输入输出格式 输入格式: 第一行为三个整数s(0<s≤1 ...

  9. POJ 2137

    水,dp[i][j][k],设为当前为i个牛,在它喜欢的j个位置,而第一个牛在k个位置,很明显了,其实不过是枚举. #include <iostream> #include <cst ...

  10. DB-MySQL:MySQL 临时表

    ylbtech-DB-MySQL:MySQL 临时表 1.返回顶部 1. MySQL 临时表 MySQL 临时表在我们需要保存一些临时数据时是非常有用的.临时表只在当前连接可见,当关闭连接时,Mysq ...