题目链接:HDU 5745

题面:

La Vie en rose

Time Limit: 14000/7000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 567    Accepted Submission(s): 285

Problem Description
Professor Zhang would like to solve the multiple pattern matching problem, but he only has only one pattern string p=p1p2...pm. So, he wants to generate as many as possible pattern strings from p using the following method:

1. select some indices i1,i2,...,ik such that 1≤i1<i2<...<ik<|p| and |ij−ij+1|>1 for all 1≤j<k.
2. swap pij and pij+1 for all 1≤j≤k.

Now, for a given a string s=s1s2...sn, Professor Zhang wants to find all occurrences of all the generated patterns in s.

Input
There are multiple test cases. The first line of input contains an integer T, indicating the number of test cases. For each test case:

The first line contains two integers n and m (1≤n≤105,1≤m≤min{5000,n}) -- the length of s and p.

The second line contains the string s and the third line contains the string p. Both the strings consist of only lowercase English letters.

Output
For each test case, output a binary string of length n. The i-th character is "1" if and only if the substring sisi+1...si+m−1 is one of the generated patterns.
Sample Input
3 4 1 abac a 4 2 aaaa aa 9 3 abcbacacb abc
Sample Output
1010 1110 100100100
Author
zimpha

题意:

问给定一个原串,一个模式串,原串任意位置的一段连续子串是否能通过交换任意相邻两位得到,可以则输出1,不可以则输出0。

解题:

这题,纯暴力就能过,复杂度看似悬,但很难出数据卡住,或者可以理论上证明,是卡不住的,加一个前缀和的预判,大概能优化1s。如果,当前位和模式串位不同,只能和后一位交换,此时下标加2,若不能交换,则代表不行。

代码:

#include <iostream>
#include <cstring>
#include <cstdio>
#define LL long long
#define sz 100005
using namespace std;
char s[sz],p[5005];
int num[sz][26],cnt[26];
int n,m;
int main()
{int t,n,m;bool flag;scanf("%d",&t);while(t--){scanf("%d%d",&n,&m);scanf("%s",s);scanf("%s",p);memset(cnt,0,sizeof(cnt));for(int i=0;i<26;i++)num[0][i]=0;for(int i=1;i<=n;i++){for(int j=0;j<26;j++)num[i][j]=num[i-1][j];num[i][s[i-1]-'a']++;}for(int i=0;i<m;i++)cnt[p[i]-'a']++;for(int i=0;i<=n-m;i++){ flag=1;for(int j=0;j<26;j++){if(cnt[j]!=num[i+m][j]-num[i][j]){flag=0;break;}}if(flag){for(int j=0;j<m;j++){if(s[i+j]==p[j])continue;else{if(j==m-1){flag=0;break;}if(s[i+j]==p[j+1]&&s[i+j+1]==p[j]){j++;}else{flag=0;break;}}}}if(flag)printf("1");elseprintf("0");}for(int i=1;i<m;i++)printf("0");printf("\n");}return 0;
}

HDU 5745 La 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. IoC容器总结与简单模拟

    IoC容器总结与简单模拟 当一个组件需要外部资源时,最直接也最明智的方法是执行查找,这种行为称为主动查找.但这种查找存在一个缺点--组件需要知道如何获得资源.那么它的解决方案是什么呢?请看下文. AD ...

  3. 使用动态代理简单模拟一下spring的事务管理

    按照平时写代码的习惯,我们会定义一个service接口 package com.proxy.test; public interface UserService {public void sayHel ...

  4. 7-18 银行业务队列简单模拟 (25 分)

    7-18 银行业务队列简单模拟 (25 分) 设某银行有A.B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 -- 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客.给定到达 ...

  5. Jmeter简介以及简单模拟性能测试

    1.Jemter简介 1.我们为什么使用Jmeter 开源,免费,基于Java编写,可集成到其他系统可拓展各个功能插件 支持接口测试, 压力(负载和压力)测试等多种功能,支持录制回放, 入门简单相较于 ...

  6. JavaWeb学习总结(四十九)——简单模拟Sping MVC

    在Spring MVC中,将一个普通的java类标注上Controller注解之后,再将类中的方法使用RequestMapping注解标注,那么这个普通的java类就够处理Web请求,示例代码如下: ...

  7. 银行业务队列简单模拟 (25 分)c语言c++

    7-2 银行业务队列简单模拟 (25 分) 设某银行有A.B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 -- 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客.给定到达银 ...

  8. NYOJ 题目77 开灯问题(简单模拟)

    开灯问题 时间限制:3000 ms  |            内存限制:65535 KB 难度:1 描述 有n盏灯,编号为1~n,第1个人把所有灯打开,第2个人按下所有编号为2 的倍数的开关(这些灯 ...

  9. FZU - 2202 犯罪嫌疑人(逻辑思维+简单模拟)

    题目链接:点击查看 题目大意:给出n和m,代表有n个人,每个人说一句话,指认一个人是无辜还是罪犯,总共有m个人说了真话,问每个人说话的真实性 题目分析:一拿到这个题目我是懵逼的..因为n给到了1e5, ...

  10. 7-45 银行业务队列简单模拟 (10 分)

    7-45 银行业务队列简单模拟 (10 分) 设某银行有A.B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 -- 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客.给定到达 ...

最新文章

  1. linux select使用
  2. 怎样测量地图上曲线的长度_测量长度的特殊方法
  3. 漂亮简洁的宇宙人404单页html源码
  4. listview当选中某一个item时设置背景色其他的不变
  5. configure 查看默认安装路径
  6. 业界分享 | 数据科学家工作融入及面试技巧
  7. 处理quartz 异常 Couldn‘t retrieve trigger: No record found for selection of Trigger with key:
  8. No MyBatis mapper was found in ‘[xx]‘ package. Please check your configuration.
  9. SpringBoot中SpringMVC 整合启动嵌入式Tomcat 原理及源码解析
  10. NMPA已注册肿瘤小Panel试剂盒生物信息学分析内容对比
  11. 当我再次看到你————中秋致Leslie
  12. 什么是CPU密集型?什么是IO密集型?
  13. 曲线上点的曲率半径计算
  14. 第十三届蓝桥杯大赛软件赛决赛(Java 大学C组)
  15. 前端工程师的三种级别,技术决定你能拿5K,还是15K,还是25K
  16. 关于差分放大器双电源改单电源问题的讨论(AD628)
  17. MySQL批量修改库、表、列的排序规则
  18. 编写一个学生类(Students),包括姓名(name)、性别(sex)、学号(num)、语文课(Chinese)、英语课(English)、数学课(Math)和平均值(avg),方法包括求三门课的平
  19. 2018.12.6 python基础学习——列表的魔法(一)
  20. react-native使用高德地图获取当前地理位置

热门文章

  1. 网络受限是个什么东东?
  2. JPEG与jpg的区别
  3. android dropbox切换账户,在Android上自动同步Dropbox | MOS86
  4. 华为存储发展史:从筚路蓝缕到星辰大海
  5. 使用JS监听键盘按下事件(keydown event)
  6. 五、Ceph之RBD存储使用
  7. Java源码阅读--任重而道远(lang)
  8. 2010.04.20 工作之路 - 明源軟件科技
  9. Qt+OSG/osgEarth跨平台编译(用Qt Creator组装各个库,实现一套代码、一套框架,跨平台编译)
  10. CNZZ站长统计怎么用