poj 1200 Crazy Search(hash)
题目链接:http://poj.org/problem?id=1200
思路分析:从数据来看,该题目使用线性时间算法,可见子串的比较是不可能的;使用hash可以在常数时间内查找,可以常数时间内判重,
可以再线性时间内解决问题;问题关键在与Hash函数的选择,使得子串之间的Hash值不同;由于NC的提示,使用NC作为基数,其他字符
分配不同的数码,从1-NC,再求取Hash值,保证函数为单一映射;
代码如下:
#include <stdio.h>
#include <string.h> const int N = ;
const int MAX_N = ;
int hash[MAX_N];
char A[N];
int value[]; int main( )
{
int N, NC, hashVal, valueKey = ;
int len, ans = , Count = ; memset( value, , sizeof( value ) );
memset( A, , sizeof( A ) );
memset( hash, , sizeof( hash ) );
scanf( "%d %d\n", &N, &NC );
scanf( "%s", A ); len = strlen( A );
for ( int i = ; i < len; ++i )
{
if ( value[A[i]] == )
value[A[i]] = ++valueKey; if ( valueKey == NC )
break;
} for ( int i = ; i + N <= len; ++i )
{
hashVal = ;
for ( int j = i; j < i + N; ++j )
hashVal = hashVal * NC + value[A[j]] - ;
if ( hash[hashVal] == )
{
hash[hashVal] = ;
ans++;
}
} printf( "%d\n", ans );
return ;
}
poj 1200 Crazy Search(hash)的更多相关文章
- POJ 1200 Crazy Search(字符串简单的hash)
题目:http://poj.org/problem?id=1200 最近看了一个关于hash的问题,不是很明白,于是乎就找了些关于这方面的题目,这道题是一道简单的hash 字符串题目,就先从他入手吧. ...
- POJ 1200 Crazy Search 【hash】
<题目链接> 题目大意: 给定n,nc,和一个字符串,该字符串由nc种字符组成,现在要你寻找该字符串中长度为n的子字符串有多少种. 解题分析: 因为要判重,所以讲这些字符串hash一下,将 ...
- POJ 1200 Crazy Search【Hash入门】
RK法:https://www.cnblogs.com/16crow/p/6879988.html #include<cstdio> #include<string> #inc ...
- POJ 1200 Crazy Search 字符串的Hash查找
第一次涉及HASH查找的知识 对于字符串的查找有很多前人开发出来的HASH函数,比较常用的好像是ELF 和 BKDR. 这道题没想到突破点是在于其nc值,告诉你组成字符串的字母种类. 还有用26进制, ...
- POJ 1200 Crazy Search (哈希)
题目链接 Description Many people like to solve hard puzzles some of which may lead them to madness. One ...
- POJ – 1200 Crazy Search
http://poj.org/problem?id=1200 #include<iostream> #include<cstring> using namespace std; ...
- POJ 1200 Crazy Search
思路:利用Karp-Rabin算法的思想,对每个子串进行Hash,如果Hash值相等则认为这两个子串是相同的(事实上还需要做进一步检查),Karp-Rabin算法的Hash函数有多种形式,但思想都是把 ...
- [poj1200]Crazy Search(hash)
Crazy Search Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 26713 Accepted: 7449 Descrip ...
- hdu1381 Crazy Search(hash map)
题目意思: 给出一个字符串和字串的长度,求出该字符串的全部给定长度的字串的个数(不同样). 题目分析: 此题为简单的字符串哈hash map问题,能够直接调用STL里的map类. map<str ...
随机推荐
- OpenCV---图片生成视频
/** It is a batch processing interface. */ #include "stdafx.h" #include <windows.h> ...
- SSIS Package 配置多数据库连接语句
- Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (一)
作为一个完成的应用程序,数据存储操作是必不可少的.因此,Android系统一共提供了四种数据存储方式.分别是:SharePreference.SQLite.Content Provider和File. ...
- C++如何将一个整数输出为小数
double a=3; //一定是double不能是int cout.setf(ios::fixed); cout.precision(2); cout< ...
- UVa1584 Circular Sequence
#include <stdio.h>#include <string.h> int less(char* str, size_t len, size_t p, size_t q ...
- 我用过的Linux命令--修改主机名
下面的所有设置都是在CentOS中实验的,其他的Linux系统的玩法是一样的,只是配置文件的目录可能不一样. 局域网中的主机名类似于广域网中的域名,修改主机名有两种方式: (1)在当前会话中修改主机名 ...
- IntelliJ IDEA 出现Unable to execute DX 问题
最近从eclipse转移到IDEA上写代码的时候,无意间发现一个让我头疼不已的问题,message报错为 Error:Android Dex: [**] Unable to execute DX Er ...
- [LeetCode]题解(python):134-Gas Station
题目来源: https://leetcode.com/problems/gas-station/ 题意分析: 在一个圈子路线里面有N个汽油站,i站的汽油有gas[i]汽油.现在有一辆无限容量的车,它从 ...
- [LeetCode]题解(python):095-Unique Binary Search Trees II
题目来源: https://leetcode.com/problems/unique-binary-search-trees-ii/ 题意分析: 给一个整数,返回所有中序遍历是1到n的树. 题目思路: ...
- python函数callable
callable(object) 中文说明:检查对象object是否可调用.如果返回True,object仍然可能调用失败:但如果返回False,调用对象ojbect绝对不会成功. 注意:类或函数是可 ...