HDU 4749: Parade Show
看大神代码,发现上交大神很棒的一个思路
题意:
在源数字串中找出尽量多的连续子串,要求子串任意两值的大小关系与目标串相同位置的值的大小关系相同。求源串能拿出的子串的最大数量。
关键词:
RK-Hash
优点:
O(k)时间完成匹配检查(关键在于他能O(1) 完成 所有 相同位 检查)
方法:
对于一个K值,用某个进制数来表示其位置。
比如 123121 中 的值 1 最后表示成 100101。
然后,对于目标串也RK-hash,对于某个值,只要比较这个数,就能知道是否相同位都相同了。
代码留恋:
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std; const int N = , K = ;
int a[N], b[N], n, m, k;
unsigned long long phs[K], ahs[K], DEF; const unsigned long long base = ; int main() {
while (scanf("%d%d%d", &n, &m, &k) == ) {
for (int i = ; i < n; ++i) {
scanf("%d", a + i);
}
for (int i = ; i < m; ++i) {
scanf("%d", b + i);
}
DEF = ;
for (int i = ; i < m - ; ++i) {
DEF *= base;
}
memset(phs, , sizeof(phs));
memset(ahs, , sizeof(ahs));
for (int i = ; i < m; ++i) {
for (int j = ; j < k; ++j) {
phs[j] *= base;
}
phs[b[i] - ] += ;
}
vector<int> v;
for (int i = ; i < n; ++i) {
for (int j = ; j < k; ++j) {
ahs[j] *= base;
}
ahs[a[i] - ] += ;
if (i >= m - ) {
int t1 = k - , t2 = k - ;
bool sue = false;
while (true) {
while (t1 >= && ahs[t1] == ) {
--t1;
}
while (t2 >= && phs[t2] == ) {
--t2;
}
if (t1 == - && t2 == -) {
sue = true;
break;
}
if (t1 == - || t2 == -) {
break;
}
if (ahs[t1] != phs[t2]) {
break;
}
--t1, --t2;
}
if (sue) {
v.push_back(i - m + );
}
ahs[a[i - m + ] - ] -= DEF;
}
}
int last = -m - , ans = ;
for (int i = ; i < (int)v.size(); ++i) {
if (v[i] < last + m) {
continue;
} else {
last = v[i];
++ans;
}
}
printf("%d\n", ans);
}
return ;
}
HDU 4749: Parade Show的更多相关文章
- HDU 4749 Parade Show(暴力水果)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4749 Problem Description 2013 is the 60 anniversary ...
- HDU 4749 Parade Show 2013 ACM/ICPC Asia Regional Nanjing Online
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4749 题目大意:给一个原序列N,再给出一个序列M,问从N中一共可以找出多少个长度为m的序列,序列中的数 ...
- HDU 4749 Parade Show(贪心+kmp)
题目链接 题目都看不懂,做毛线...看懂了之后就是kmp出,所有的匹配区间,然后DP可以写,贪心也可以做把,DP应该需要优化一下,直接贪,也应该对的,经典贪心问题. #include<iostr ...
- HDU 2490 Parade(DPの单调队列)(2008 Asia Regional Beijing)
Description Panagola, The Lord of city F likes to parade very much. He always inspects his city in h ...
- HDOJ 4749 Parade Show
说实在的在比赛时看错了题意,一直对最后一段的描述不是很清楚.闲话少说: 题意:给一个主串,再一个副串,问主串中有多少个子串和副串的的规律相同,即相邻的相等大于小于,用过的就不能再用了. #includ ...
- hdu 4749
题目很简单,不过题意很难看懂. 就是给一个标准的大小关系的队列,从原队列中找出最多的匹配子队列,感觉就像一个KMP算法+贪心: 不过这个题可能数据有点水把,竟然只要判断相邻的关系就可以A掉: 代码: ...
- hdu 5972 Regular Number 字符串Shift-And算法 + bitset
题目链接 题意 给定两个串\(S,T\),找出\(S\)中所有与\(T\)匹配的子串. 这里,\(T\)的每位上可以有若干(\(\leq 10\))种选择,匹配的含义是:对于\(S\)的子串的每一位, ...
- luogu 2463 [SDOI2008]Sandy的卡片 kmp || 后缀数组 n个串的最长公共子串
题目链接 Description 给出\(n\)个序列.找出这\(n\)个序列的最长相同子串. 在这里,相同定义为:两个子串长度相同且一个串的全部元素加上一个数就会变成另一个串. 思路 参考:hzwe ...
- HDU 2389 Rain on your Parade / HUST 1164 4 Rain on your Parade(二分图的最大匹配)
HDU 2389 Rain on your Parade / HUST 1164 4 Rain on your Parade(二分图的最大匹配) Description You're giving a ...
随机推荐
- noip考前注意事项
明天就要离开学校,后天的现在Day1已经考完啦,临近考试了紧不紧张呢(不紧张才怪),那么考前我们应该注意点什么呢? 1.带好自己的证件,带好自己的证件,带好自己的证件,这很重要. 2.试机的时候一定要 ...
- NOIP2016 toy
题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业. 有一天, 这些玩具小人把小南的眼镜藏了起来. 小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的面朝圈外.如下图: 这时singer告诉 ...
- [JZOJ] 5837.Omeed
先摆出来这个式子 \[ score=A\sum S_i+B\sum S_i\times f(i) \] 先研究\(f\)函数(也就是Combo函数) 显然的有 \[ f(i)=P_i(f(i-1)+1 ...
- Spring Security 与 OAuth2(介绍)
https://www.jianshu.com/p/68f22f9a00ee Spring Security 与 OAuth2(介绍) 林塬 2018.01.23 11:14* 字数 3097 阅读 ...
- Linux Ptrace 详解
转 https://blog.csdn.net/u012417380/article/details/60470075 Linux Ptrace 详解 2017年03月05日 18:59:58 阅读数 ...
- list_for_each_entry()函数分析
list_for_each原型: #define list_for_each(pos, head) \ for (pos = (head)->next, prefetch(pos->nex ...
- Android兼容性测试CTS --环境搭建、测试执行、结果分析
为了确保Android应用能够在所有兼容Android的设备上正确运行,并且保持相似的用户体验,在每个版本发布之时,Android提供了一套兼容性测试用例集合(Compatibility Test S ...
- apache 虚拟主机配置(根据不同的域名映射到不同网站)
最近弄了台香港服务器做测试,Web服务器软件用的是Apache2.2,机器只有一台,ip只有一个,但是想测试几个站点,于是尝试了下Apache的虚拟主机配置.之前已经写过一篇博文了——<Apac ...
- PHP-7.1 源代码学习:字节码生成 之 "$a = 1"
前言 本文通过分析 "$a=1" 这个 PHP 语句的编译和执行来窥探 php-cli 解释执行逻辑 准备 参考之前的系列文章,在 ubuntu 环境下下载,编译 PHP 源代码 ...
- Eclipse调试程序及项目的导入导出
Eclipse调试程序 调试概述: ① 调试就是测试程序的方法,主要的目的就是解决程序的逻辑问题,流程是:发现问题.修改问题.正确执行; ② 以前我们可以使用System.out.printl ...