链接:http://acm.hdu.edu.cn/showproblem.php?pid=5745

题意:给定一个母串s和一个子串p。问s中有多少个位置可以匹配p,可以不完全匹配,p字符串中的每个位置的字符最多可以变动一次(不变的,与前面的字符交换,与后面的字符交换)。

分析:做多校学姿势。xg的题解解释得很好,但是对于我这种没写过这种优化的人来说还是要看代码学习一遍,我说下我的理解吧。首先xg列出了dp方程:dp[i][j][0]=dp[i-1][j-1][2]&&s[i]==p[j-1]、dp[i][j][1]=(dp[i-1][j-1][0]||dp[i-1][j-1][1])&&s[i]==p[j]、dp[i][j][2]=(dp[i-1][j-1][0]||dp[i-1][j-1][1])&&s[i]==p[j+1]。我们先遍历p的1~m个字符然后用bitset来表示有遍历到当前p[i]时上一层有哪些位置的i是匹配到了前i-1个字符,然后根据当前字符是谁直接去找哪些位置是合法的来更新当前层。这样的话我们就能一层一层的得到1~n的哪些位置是合法的。重点是预处理出26个字符在哪些位置出现过然后用bitset存下来以便能直接&出当前层哪些位置是合法的,还不懂的话看看代码吧。O(n*m/w)。PS:XG增强了数据,减小了时间,变成了3.5s。我的程序过不了了。想过的人自己手写bitset卡卡常数吧。

代码:

#include<map>
#include<set>
#include<cmath>
#include<queue>
#include<bitset>
#include<math.h>
#include<vector>
#include<string>
#include<stdio.h>
#include<cstring>
#include<iostream>
#include<algorithm>
#pragma comment(linker, "/STACK:102400000,102400000")
using namespace std;
const int N=100010;
const int mod=100000000;
const int MOD1=1000000007;
const int MOD2=1000000009;
const double EPS=0.00000001;
typedef long long ll;
const ll MOD=1000000007;
const int MAX=2000000010;
const ll INF=1ll<<55;
const double pi=acos(-1.0);
typedef double db;
typedef unsigned long long ull;
char s[N],p[5010];
bitset<N>w[30];
bitset<N>dp[2][3];
int main()
{int i,j,n,m,t,now,las;scanf("%d", &t);while (t--) {scanf("%d%d", &n, &m);scanf("%s%s", s+1, p+1);for (i=0;i<26;i++) w[i].reset();for (i=1;i<=n;i++) w[s[i]-'a'][i-1]=1;now=las=1;dp[now][1].set();dp[now][0].reset();dp[now][2].reset();for (i=1;i<=m;i++) {las=now;now^=1;for (j=0;j<3;j++) dp[now][j].reset();int pre=p[i-1]-'a',mid=p[i]-'a',suf=p[i+1]-'a';if (i>1) dp[now][0]=(dp[las][2]&w[pre])<<1;dp[now][1]=((dp[las][0]&w[mid])|(dp[las][1]&w[mid]))<<1;if (i<m) dp[now][2]=((dp[las][0]&w[suf])|(dp[las][1]&w[suf]))<<1;}for (i=m;i<=n;i++)if (dp[now][0][i]||dp[now][1][i]) printf("1");else printf("0");for (i=n+1;i<=n+m-1;i++) printf("0");printf("\n");}return 0;
}

hdu5745La Vie en rose相关推荐

  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. 中物体的显示模式_美学,色彩模式,图像格式

    "神奇的一瞬间,阳光穿过透明天花板照进了毕加索的这幅画里,正好和画作完美结合在一起.坐在奥赛门口的台阶上喝咖啡,晒太阳,欣赏街头艺人表演.感谢这个随着音乐舞蹈的法国老太太,她让我明白什么是真 ...

  4. 机器人瓦力 配乐_《WALL-E》机器人小王子

    前几天看了迪斯尼的动画片<WALL-E>,很感人,并且发现了一个机器人版的小王子. 清垃圾的机器人Wall-E孤单的在废墟地球默默的日复一日辛勤工作,像个上班族每天准时上下班,干活的时候还 ...

  5. 机器人总动员最后的bgm_引导你欣赏《机器人瓦力》的电影配乐

    音乐为配合影片中出现的画面, 营造出一种特定的氛围基调.视觉上的效果带给我们的是一种直观的感受, 而伴随音乐细致入微的描写, 才能让画面更加的生动, 形象更深入人心.在动画片中, 最先出现的Put O ...

  6. 吴恩达机器学习作业8(下)--- 推荐系统

    文章目录 代码分析 数据集 代码分析 导入数据 datafile = 'data/ex8_movies.mat' mat = scipy.io.loadmat( datafile ) Y = mat[ ...

  7. movie_recommendation_spark1

    mllib建立推荐模型 数据准备 数据包含在ml-100k的文件夹中,文件夹中比较重要的几个文件是u.user(用户属性数据集).u.item(电影元数据)和u.data(用户对电影的评分数据) (1 ...

  8. 2016区域赛前冲刺训练

    UPD 2016.10.23 shift-and (2题) Codeforces 训练 现在已经完成了: 191 [Codeforces Round #377] (6/6) Div 2 A Buy a ...

  9. 机器人总动员片尾曲歌词_机器人总动员中的所有歌曲叫什么名?

    展开全部 <机器人总动员>的原声皆由托马斯·纽曼主导创作. 歌曲包e68a843231313335323631343130323136353331333431343730括: 1.Put ...

  10. 机器人瓦力 配乐_机器人瓦力中的插曲是什么?

    迪斯尼3D巨作<Wall·E 机器人总动员>电影原声 专辑名称:WALL·E 机器人总动员 艺 术 家:Thomas Newman等 音乐类型:Soundtrack 唱片公司:Walt D ...

最新文章

  1. 采购审批专题总结--bob
  2. Ubuntu16.04 搭建nexus 私服 学习步骤以及安装maven和git
  3. 机械爪的带有压力反馈的控制实验
  4. 序列密码体制——密码学笔记(三)
  5. 画出18*18的棋盘以及用不同颜色绘制出同心圆(python实现)
  6. python数组随机分组_Python实用黑科技——以某个字段进行分组
  7. mac 使用brew卸载安装node
  8. android学习笔记---39_采用Service实现电话监控器,刻录打电话者的声音后通过socket上传到服务端
  9. Mybatis 别名机制,自动扫描 数据的增删改
  10. lintcode :Count and Say 报数
  11. ComBox、listBox、checklistBox控件
  12. 实战JavaScript:实现贪吃蛇——面向对象练习
  13. Matlab 2018a的安装步骤
  14. 完美解决鼠标单击变双击问题^_^
  15. Unity线性空间UI制作方面总结
  16. 这3种管理者是“企业毒瘤”,须根除
  17. iOS开发:对于Xcode的Open Developer Tool中常用功能使用的总结
  18. android 机器人gif,看完这15张GIF图 就再也不用担心机器人叛乱了
  19. 蔡氏电路matlab,蔡氏电路MATLAB混沌仿真
  20. 英读廊——吃醋的女朋友(A Jealous Girlfriend)

热门文章

  1. SigmaStudio之Sine Tone的Freq\Ison换算
  2. 病毒木马查杀实战第017篇:U盘病毒之专杀工具的编写
  3. 餐厅小票打印模板_收银系统小票标签设置
  4. 【CSS笔记】CSS实现后台管理系统主界面布局
  5. NetLimiter 4.0.15.0 x64 破解新鲜出炉!
  6. Unity3D 中动态更改材质球纹理
  7. 华为系统和计算机,电脑手机合二为一 华为多屏协同让电脑与手机亲密互动
  8. unity3D原生声音系统
  9. d3.js学习笔记-10(布局:树状图、集群图捆、捆图)
  10. CTF 内存取证 USB流量分析