题目:http://acm.hdu.edu.cn/showproblem.php?pid=5745

C++ bitset的用法:https://www.cnblogs.com/magisk/p/8809922.html

题目:

题意:给两个字符串 a 和 b ,b可以进行变换,规则是可以任意交换相邻两个字符的位置,但是不可以有交叉。求a中每一个位置能不能匹配b或b变换得到的子串。

思路:dp,dp[i]表示匹配模式串前i+1个的状况,其中dp[i][0],dp[i][1],dp[i][2]分别表示和前一个交换,不交换,和后一个交换的情况,采用bitset优化。

代码:

#include<iostream>
#include<string.h>
#include<stdio.h>
#include<algorithm>
#include<bitset>
using namespace std;
bitset<>dp[][],w[];
char s[];
char t[];
int main()
{
int tt;
int n,m;
scanf("%d",&tt);
while(tt--)
{
scanf("%d%d",&n,&m);
scanf("%s%s",s,t);
for(int i=;i<;i++)w[i].reset();//由bitset知,reset函数不带参数时将bitset的每一位置为0
for(int i=;i<;i++)
for(int j=;j<;j++)
dp[i][j].reset();
for(int i=;i<n;i++)
{
w[s[i]-'a'][i]=;
}
dp[][]=w[t[]-'a'];
if(m>)dp[][]=w[t[]-'a'];
int now = ;
for(int i=;i<m;i++)
{
now^=;
dp[now][]=(dp[now^][]<<)&w[t[i-]-'a'];
dp[now][]=((dp[now^][]|dp[now^][])<<)&w[t[i]-'a'];
if(i<m-)
{
dp[now][]=((dp[now^][]|dp[now^][])<<)&w[t[i+]-'a'];
}
}
for(int i=;i<n;i++)
{
if(dp[now][][i+m-]||dp[now][][i+m-])printf("");
else printf("");
}
puts("");
}
}

hdu5745(dp+bitset)的更多相关文章

  1. HDU5716, HDU5745【dp+bitset】

    DP+bitset  HDU5716 dp[i][j] = dp[i-1][j-1] && (s[i] in set[j]); 第二维压bitset #include <bits ...

  2. hdu5745 La Vie en rose 巧妙地dp+bitset优化+滚动数组减少内存

    /** 题目:hdu5745 La Vie en rose 链接:http://acm.hdu.edu.cn/showproblem.php?pid=5745 题意:题目给出的变换规则其实就是交换相邻 ...

  3. 字符串匹配dp+bitset,滚动数组优化——hdu5745(经典)

    bitset的经典优化,即把可行性01数组的转移代价降低 bitset的适用情况,当内层状态只和外层状态的上一个状态相关,并且内层状态的相关距离是一个固定的数,可用bitset,换言之,能用滚动数组是 ...

  4. hdu5745--La Vie en rose (DP+bitset)

    好题,学到新姿势! 题意:给两个字符串 a 和 b ,b可以进行变换,规则是可以任意交换相邻两个字符的位置,但是不可以有交叉(例如3和4交换,5和6交换 互不影响,但是2和3,3和4就不可以).求a中 ...

  5. hdu 5745 La Vie en rose DP + bitset优化

    http://acm.hdu.edu.cn/showproblem.php?pid=5745 这题好劲爆啊.dp容易想,但是要bitset优化,就想不到了. 先放一个tle的dp.复杂度O(n * m ...

  6. HDU5745-La Vie en rose-字符串dp+bitset优化

    这题现场的数据出水了,暴力就能搞过. 标解是拿bitset做,转移的时候用bitset优化过的操作(与或非移位)来搞,复杂度O(N*M/w) w是字长 第一份标程的思路很清晰,然而后来会T. /*-- ...

  7. BZOJ3425[POI2013]Polarization——DP+bitset+分块

    题目描述 Everyone knew it would only be a matter of time. So what? Faced for years on, a peril becomes t ...

  8. bzoj1087 互不侵犯King 状压dp+bitset

    题目传送门 题目大意:中文题面. 思路:又是格子,n又只有9,所以肯定是状压dp,很明显上面一行的摆放位置会影响下一行,所以先预处理出怎样的二进制摆放法可以放在上下相邻的两行,这里推荐使用bitset ...

  9. HDU 5313——Bipartite Graph——————【二分图+dp+bitset优化】

    Bipartite Graph Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)T ...

随机推荐

  1. Codeforces 1039D You Are Given a Tree [根号分治,整体二分,贪心]

    洛谷 Codeforces 根号分治真是妙啊. 思路 考虑对于单独的一个\(k\)如何计算答案. 与"赛道修建"非常相似,但那题要求边,这题要求点,所以更加简单. 在每一个点贪心地 ...

  2. windows.open()

       引:Window_Open详解一.window.open()支持环境:JavaScript1.0+/JScript1.0+/Nav2+/IE3+/Opera3+ 二.基本语法:window.op ...

  3. idea Unable to open debugger port (127.0.0.1:58006) Address already in use: JVM_Bind 的解决办法

    报错说端口58006 被占用了,于是去修改端口 重新dubug 发现换个端口号还是不行,同样的错误.有时候你把idea关闭重新打开依旧不起作用.最暴力的办法就是重启电脑... 问题解决: 查看使用中的 ...

  4. FileStorage

    1. 函数说明                  功能 函数声明 参数 FileStorage构造函数 cv::FileStorage:: FileStorage(const String& ...

  5. 弃 Java 而使用 Kotlin 的你后悔了吗?| kotlin将会是最好的开发语言

    自从 2011 年发布以来,Kotlin 凭借强大的功能在开发者中的欢迎程度与日俱增.且在一年前,Google 宣布 Kotlin 正式成为 Android 官方开发语言,由此引发了从 Java 迁移 ...

  6. mvn tomcat7:help的14个命令

    D:\2018\code\XXX>mvn tomcat7:help [INFO] Scanning for projects... [INFO] [INFO] ----------------- ...

  7. Oracle 查询优化的基本准则详解

      注:报文来源:想跌破记忆寻找你 < Oracle 查询优化的基本准则详解 > Oracle 查询优化的基本准则详解 1:在进行多表关联时,多用 Where 语句把单个表的结果集最小化, ...

  8. oracle数据库内存调整之增加内存

    注:本文来源:小颜Kevin   <oracle数据库内存调整之增加内存> 模拟操作系统内存从2G增加为8G后,调整数据库内存参数,示例中参数不作为实际生产环境参考,因为因需所取,调整参数 ...

  9. linux 批量进行:解压缩某一类压缩文件类型的文件

    1: 编写脚本 [oracle@oracle oracle]$ vim unzip.sh ziphome=/u01/app/oracle ziplist=`du -a $ziphome |grep ' ...

  10. Confluence 6 为登录失败编辑,禁用和配置验证码

    在默认的情况下,验证码将会在失败登录次数达到的时候显示. 如果为登录失败编辑,禁用和配置验证码: 在屏幕的右上角单击 控制台按钮 ,然后选择 General Configuration 链接. 在左侧 ...