• hdu5745 bitset+dp。bitset直接进行位运算时可以将复杂度降低到O(N/8)。用dp[i][j][k]代表s串第i个字符,p串第j个字符,k=0,1,2分别代表与前一个字符进行交换,不交换,与后一个字符进行交换。dp[i][j][1]=(s[i]=p[j])&(dp[i-1][j-1][0]|dp[i-1][j-1][1])考虑优化, 用bitset表示第一维,用滚动数组表示第二维。再用另外一个bitset预处理26个字符的情况,可以化解得到dp[cur][1]=w[p[j]-'a']&((dp[cur^1][0]|dp[cur^1][1])<<1),另外两种情况可以同理处理。
/* ***********************************************
Author        :Maltub
Email         :xiang578@foxmail.com
Blog          :htttp://www.xiang578.com
************************************************ */#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#include<bitset>
//#include <bits/stdc++.h>
#define rep(i,a,n) for(int i=a;i<n;i++)
#define per(i,a,n) for(int i=n-1;i>=a;i--)
#define pb push_back
using namespace std;
typedef vector<int> VI;
typedef long long ll;
const ll mod=1000000007;
const int N=1e5+10;
char s[N],p[N];
bitset<N>dp[2][3];
bitset<N>w[30];int main()
{//freopen("in.txt","r",stdin);//freopen("out.txt","w",stdout);int _,n,m,ok,cur;scanf("%d",&_);while(_--){scanf("%d%d",&n,&m);scanf("%s",s);scanf("%s",p);for(int i=0;i<30;i++)w[i].reset();for(int i=0;i<n;i++)w[s[i]-'a'][i]=1;for(int i=0;i<2;i++)for(int j=0;j<3;j++)dp[i][j].reset();cur=1;dp[cur][1]=w[p[0]-'a'];if(m>1) dp[cur][2]=w[p[1]-'a'];for(int j=1;j<m;j++){cur^=1;dp[cur][0]=w[p[j-1]-'a']&(dp[cur^1][2]<<1);dp[cur][1]=w[p[j]-'a']&((dp[cur^1][0]|dp[cur^1][1])<<1);if(j+1<m) dp[cur][2]=w[p[j+1]-'a']&((dp[cur^1][0]|dp[cur^1][1])<<1);}for(int i=0;i<n;i++)if(dp[cur][0][i+m-1]||dp[cur][1][i+m-1])printf("1");elseprintf("0");printf("\n");}return 0;
}/*
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <math.h>
#include <stdlib.h>
#include <time.h>
//#include <bits/stdc++.h>
#define rep(i,a,n) for(int i=a;i<n;i++)
#define per(i,a,n) for(int i=n-1;i>=a;i--)
#define pb push_back
using namespace std;
typedef vector<int> VI;
typedef long long ll;
const ll mod=1000000007;
const int N=1e5+10;
char s[N],p[N];int main()
{//freopen("in.txt","r",stdin);//freopen("out.txt","w",stdout);int _,n,m,ok;scanf("%d",&_);while(_--){scanf("%d%d",&n,&m);scanf("%s",s);scanf("%s",p);for(int i=0;i<=n-m;i++){ok=1;for(int j=0;j<m;j++){if(s[i+j]==p[j]) continue;if(j+1<m&&s[i+j]==p[j+1]&&s[i+j+1]==p[j]) {j++;continue;}ok=0;break;}printf("%d",ok);}for(int i=n-m+1;i<n;i++)printf("0");printf("\n");}return 0;
}*/

hdu5745 La Vie en rose【dp+bitset优化】相关推荐

  1. La vie en rose玫瑰人生

    Edith Piaf:La Vie En Rose 玫瑰色的人生 Des yeux qui font baiser les miens 他的双唇吻我的眼 Un rire qui se perd sur ...

  2. 2016多校赛2 A 数学推公式 E 极角排序,组合数(待补) L dp+bitset优化

    2016 Multi-University Training Contest 2 A - Acperience 题意:给出w[],求S((w[i]-aB[i])^2)的最小值(B[i]为1或-1). ...

  3. CodeForces - 577B Modulo Sum(dp+bitset优化)

    题目链接:点击查看 题目大意:给出一个长度为 n 的数列,现在问能否选出一个子序列,满足其累加之和可以整除 m 题目分析:可以当做背包去思考,dpi,jdp_{i,j}dpi,j​代表的是选了前 i ...

  4. HDU 5890 Eighty seven(DP+bitset优化)

    题目链接 Eighty seven 背包(用bitset预处理)然后对于每个询问O(1)回答即可. 预处理的时候背包. #include <bits/stdc++.h>using name ...

  5. C 简单瞎搞题(牛客练习赛22)(bitset优化dp)

    Bitset优化Dp 题目链接 一般DP做法 显然后面的数是与前面的数字相关的,所以我们有dp数组,dp[i][j]dp[i][j]dp[i][j]选取了jjj个数,iii是否可以被创造出来,如果可以 ...

  6. [2021-09-02 contest]CF1251C,可达性统计(bitset优化dp),Boomerang Tournament(状压dp),小蓝的好友(mrx)(treap平衡树)

    文章目录 CF1251C Minimize The Integer acwing164:可达性统计 Facebook Hacker Cup 2016 Round 1 Boomerang Tournam ...

  7. 2021牛客暑期多校训练营8 F-Robots(bitset优化dp)

    F-Robots 第一种第二种机器人直接O(n)O(n)O(n)判断即可. 第三种机器人暴力dp,用bitset优化. bitset<250005> b[i][j] 表示从(i,j)(i, ...

  8. CF577B Modulo Sum(dp,抽屉原理 | bitset优化 | 二进制优化)

     洛谷链接: Modulo Sum - 洛谷 思路: 明显是一个背包问题,要求子序列和整除m,即sum%m = 0,所以边取模边求和即可.但是朴素做法的时间复杂度是O(nm),会TLE.有三种优化思路 ...

  9. 【HDU - 5890】Eighty seven(bitset优化背包)

    题干: Mr. Fib is a mathematics teacher of a primary school. In the next lesson, he is planning to teac ...

  10. 【bzoj5197】[CERC2017]Gambling Guide 期望dp+堆优化Dijkstra

    题目描述 给定一张n个点,m条双向边的无向图. 你要从1号点走到n号点.当你位于x点时,你需要花1元钱,等概率随机地买到与x相邻的一个点的票,只有通过票才能走到其它点. 每当完成一次交易时,你可以选择 ...

最新文章

  1. bing浏览器_微软推出全新 Edge 浏览器,这 3 大特色亮点 Chrome 都没有
  2. 编码和编码格式一样吗?_学习如何像专业人士一样编码
  3. 注意力机制Q K V
  4. 推荐的Oracle书籍
  5. 微信实时Look-alike算法分享赏析
  6. C#语法——await与async的正确打开方式
  7. 最强Java面试题全部合集,涵盖BAT大厂面试必考的9大技术!-强烈建议收藏
  8. 7-二进制,十进制,十六进制
  9. 微课|中学生可以这样学Python(例11.3):tkinter通信录管理系统2
  10. signature=cb97f07fbd7b371e6311b0d8707b6398,vue 汉字转拼音(filter)
  11. 借条已经收回,他以没收据为由让我继续还款怎样办?
  12. linux实战清理挖矿病毒kthreaddi
  13. AcWing 145.超市(二叉堆)
  14. Workflow WF Reference Links for 2009-03-06
  15. 基于IDEA使用Spark API开放Spark程序(1)
  16. 什么是seo外链工具
  17. 三区三线划定-永久基本农田
  18. C#实现图片压缩及裁剪
  19. 基于docer 构建微服务基础设施
  20. 四大降维算法的比较和一些理解(PCA、LDA、LLE、LEP)

热门文章

  1. spring基础知识(IOC、DI、AOP)
  2. Dell 服务器开启虚拟化功能Intel VT-x
  3. win10计算机禁用用户账户控制,win10用户账户控制怎么关闭_用户账户控制如何解除win10-win7之家...
  4. DXF文件格式——DXF 格式
  5. petalinux 前端包管理器(dnf)
  6. opencv2.4.10配置vs2010旗舰版过程与遇到问题的解决
  7. 虚拟路由冗余协议(VRRP)
  8. wma转mp3怎么弄_wma格式怎么转换mp3
  9. nginx: [emerg] bind() to 0.0.0.0:80 failed (13: Permission denied)
  10. Mac部分按键失灵问题解决