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 ...
随机推荐
- [LUOGU] P4251 [SCOI2015]小凸玩矩阵
行列看成点,格子看成边,二分一个边权,删去大于它的边,新图上的最大流>k则答案可以更优,小于k则调整左边界. #include<algorithm> #include<iost ...
- React和Vue组件间数据传递demo
一.React (一)父组件向子组件传数据 简单的向下传递参数 /* Parent */ class App extends Component { render() { return ( <d ...
- python之路-双下方法
双下方法 定义: 双下方法是特殊方法,他是解释器提供的,由双下线加方法名加双下划线 __方法名__具有特殊意义的方法 双下方法主要是Python源码程序员使用的,元编程 我们在开发中尽量不要使用双下方 ...
- Java-framework-Vaadin
安装vaadin: (1) 首先试了maven+vaadin. 安装maven: 1. unzip apache-maven-3.3.9-bin.zip 2. modify PATH environm ...
- ADB命令后台修改系统默认输入法
今天要研究uiautomator如何输入中文,看网上有一种常用的解决办法:http://www.cnblogs.com/yajing-zh/p/5125387.html在这篇博客最后提出来的问题,也是 ...
- php三种方式操作mysql数据库
php可以通过三种方式操作数据库,分别用mysql扩展库,mysqli扩展库,和mysqli的预处理模式分别举案例加以说明 1.通过mysql方式操作数据库 工具类核心代码: <?php cla ...
- Hive学习笔记(三)-- DML和DDL操作
01-Hive表的DDL操作--修改表 创建一个分区表并加载数据 查询数据 修改表 加载数据 查询一下 另外一个命令查询表的分区 如何删除一个分区呢 查询一个,分区被删除了 修改表名 查询改名的新表的 ...
- luogu2756 飞行员配对方案问题
匈牙利 #include <iostream> #include <cstring> #include <cstdio> using namespace std; ...
- 大数据学习——scala数组
package com import scala.collection.mutable.ArrayBuffer /** * Created by Administrator on 2019/4/8. ...
- python - unittest - testsuite and runner
前置条件: 测试用例部分或全部编写完成 一. 生成测试集 1. 方法1 - 通过加载函数来加载测试用例 import unittest from TestCase.test_login import ...