HDU 5745 La Vie en rose(简单模拟)
题目链接: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
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.
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.
题意:
问给定一个原串,一个模式串,原串任意位置的一段连续子串是否能通过交换任意相邻两位得到,可以则输出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(简单模拟)相关推荐
- La vie en rose玫瑰人生
Edith Piaf:La Vie En Rose 玫瑰色的人生 Des yeux qui font baiser les miens 他的双唇吻我的眼 Un rire qui se perd sur ...
- IoC容器总结与简单模拟
IoC容器总结与简单模拟 当一个组件需要外部资源时,最直接也最明智的方法是执行查找,这种行为称为主动查找.但这种查找存在一个缺点--组件需要知道如何获得资源.那么它的解决方案是什么呢?请看下文. AD ...
- 使用动态代理简单模拟一下spring的事务管理
按照平时写代码的习惯,我们会定义一个service接口 package com.proxy.test; public interface UserService {public void sayHel ...
- 7-18 银行业务队列简单模拟 (25 分)
7-18 银行业务队列简单模拟 (25 分) 设某银行有A.B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 -- 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客.给定到达 ...
- Jmeter简介以及简单模拟性能测试
1.Jemter简介 1.我们为什么使用Jmeter 开源,免费,基于Java编写,可集成到其他系统可拓展各个功能插件 支持接口测试, 压力(负载和压力)测试等多种功能,支持录制回放, 入门简单相较于 ...
- JavaWeb学习总结(四十九)——简单模拟Sping MVC
在Spring MVC中,将一个普通的java类标注上Controller注解之后,再将类中的方法使用RequestMapping注解标注,那么这个普通的java类就够处理Web请求,示例代码如下: ...
- 银行业务队列简单模拟 (25 分)c语言c++
7-2 银行业务队列简单模拟 (25 分) 设某银行有A.B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 -- 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客.给定到达银 ...
- NYOJ 题目77 开灯问题(简单模拟)
开灯问题 时间限制:3000 ms | 内存限制:65535 KB 难度:1 描述 有n盏灯,编号为1~n,第1个人把所有灯打开,第2个人按下所有编号为2 的倍数的开关(这些灯 ...
- FZU - 2202 犯罪嫌疑人(逻辑思维+简单模拟)
题目链接:点击查看 题目大意:给出n和m,代表有n个人,每个人说一句话,指认一个人是无辜还是罪犯,总共有m个人说了真话,问每个人说话的真实性 题目分析:一拿到这个题目我是懵逼的..因为n给到了1e5, ...
- 7-45 银行业务队列简单模拟 (10 分)
7-45 银行业务队列简单模拟 (10 分) 设某银行有A.B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 -- 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客.给定到达 ...
最新文章
- linux select使用
- 怎样测量地图上曲线的长度_测量长度的特殊方法
- 漂亮简洁的宇宙人404单页html源码
- listview当选中某一个item时设置背景色其他的不变
- configure 查看默认安装路径
- 业界分享 | 数据科学家工作融入及面试技巧
- 处理quartz 异常 Couldn‘t retrieve trigger: No record found for selection of Trigger with key:
- No MyBatis mapper was found in ‘[xx]‘ package. Please check your configuration.
- SpringBoot中SpringMVC 整合启动嵌入式Tomcat 原理及源码解析
- NMPA已注册肿瘤小Panel试剂盒生物信息学分析内容对比
- 当我再次看到你————中秋致Leslie
- 什么是CPU密集型?什么是IO密集型?
- 曲线上点的曲率半径计算
- 第十三届蓝桥杯大赛软件赛决赛(Java 大学C组)
- 前端工程师的三种级别,技术决定你能拿5K,还是15K,还是25K
- 关于差分放大器双电源改单电源问题的讨论(AD628)
- MySQL批量修改库、表、列的排序规则
- 编写一个学生类(Students),包括姓名(name)、性别(sex)、学号(num)、语文课(Chinese)、英语课(English)、数学课(Math)和平均值(avg),方法包括求三门课的平
- 2018.12.6 python基础学习——列表的魔法(一)
- react-native使用高德地图获取当前地理位置