Crazy Search

真是不容易啊,人生第一道hash题竟然是搜博客看题解来的。

题意:给你一个包含m种字符的字符串,求长度为n的不同子串有多少个。

将每个字串化为一个具体的数然后存入数组标记即可,如果重复出现肯定不用再加了。那么怎么化为一个数呢,这里用的方法是先将每个字符对应一个数,然后每个长度为n的子串就有了一个连续的数,将这个数段转化为m进制下的数即可,时间复杂度是O(len)。注意数据范围!

虽然和网上很多代码思路都是一样的,毕竟是自己理解的结晶,日后回过头回顾回顾也是很欣慰的!

const int N=1e7;
const double eps=1e-4;
const double PI=acos(-1.0);
char str[N];
int fuck[256];
bool v[N];
int main()
{
int n,m;
while(~scanf("%d%d%s",&n,&m,str))
{
int len=strlen(str);
memset(fuck,0,sizeof(fuck));
memset(v,false,sizeof(v));
int x=0;
for(int i=0;i<len;i++)
if(!fuck[str[i]]) fuck[str[i]]=x++;
int pow=1,sum=0;
for(int i=1;i<n;i++) pow*=m;
for(int i=0;i<n;i++) sum=sum*m+fuck[str[i]];
int res=0;
if(!v[sum])
{
v[sum]=true;
res++;
}
for(int i=n;i<len;i++)
{
sum-=fuck[str[i-n]]*pow;
sum=sum*m+fuck[str[i]];
if(!v[sum])
{
res++;
v[sum]=true;
}
}
printf("%d\n",res);
}
return 0;
}

POJ-1200 Crazy Search,人生第一道hash题!的更多相关文章

  1. POJ 1200 Crazy Search(字符串简单的hash)

    题目:http://poj.org/problem?id=1200 最近看了一个关于hash的问题,不是很明白,于是乎就找了些关于这方面的题目,这道题是一道简单的hash 字符串题目,就先从他入手吧. ...

  2. poj 1200 Crazy Search(hash)

    题目链接:http://poj.org/problem?id=1200 思路分析:从数据来看,该题目使用线性时间算法,可见子串的比较是不可能的:使用hash可以在常数时间内查找,可以常数时间内判重, ...

  3. POJ 1200 Crazy Search 【hash】

    <题目链接> 题目大意: 给定n,nc,和一个字符串,该字符串由nc种字符组成,现在要你寻找该字符串中长度为n的子字符串有多少种. 解题分析: 因为要判重,所以讲这些字符串hash一下,将 ...

  4. POJ 1200 Crazy Search【Hash入门】

    RK法:https://www.cnblogs.com/16crow/p/6879988.html #include<cstdio> #include<string> #inc ...

  5. POJ 1200 Crazy Search 字符串的Hash查找

    第一次涉及HASH查找的知识 对于字符串的查找有很多前人开发出来的HASH函数,比较常用的好像是ELF 和 BKDR. 这道题没想到突破点是在于其nc值,告诉你组成字符串的字母种类. 还有用26进制, ...

  6. POJ 1200 Crazy Search (哈希)

    题目链接 Description Many people like to solve hard puzzles some of which may lead them to madness. One ...

  7. POJ – 1200 Crazy Search

    http://poj.org/problem?id=1200 #include<iostream> #include<cstring> using namespace std; ...

  8. POJ 1200 Crazy Search

    思路:利用Karp-Rabin算法的思想,对每个子串进行Hash,如果Hash值相等则认为这两个子串是相同的(事实上还需要做进一步检查),Karp-Rabin算法的Hash函数有多种形式,但思想都是把 ...

  9. poj 1200 crasy search

    https://vjudge.net/problem/POJ-1200 题意: 给出一个字符串,给出子串的长度n和给出的字符串中不同字符的个数nc,统计这个字符串一共有多少不同的长度为n的子串. 思路 ...

随机推荐

  1. Magento 0元订单 支付方式 -- Magento 0 Subtotal Payment Method

    需求 现有购物网站支持2种支付方式,但是考虑到会出现如下情况: 在一个优惠活动中,假如有一些订单的总金额为0, 那么这些订单就不必跳转到支付网关,现有支付方式无法处理此种情况. 分析 当custome ...

  2. 仿天猫淘宝的ShopNC好商城原生Android 客户端源码项目

    开发环境:Android Studio 2.0 | Gradle 2.0.0最后更新:2016-04-28 简介:基于好商城V4的Android客户端 目前已完成的功能(概述): 1.启动页 -> ...

  3. SAP不同的产品是如何支持用户创建自定义字段的

    我们从SAP CRM,Cloud for Customer(简称C4C)和S/4HANA这三个产品分别来看看. SAP CRM 我们使用所谓的Application Enhancement Tool( ...

  4. afnetworking NSCocoaErrorDomain Code=3840 解决

    afnetworking json解析出错 解决方法1 AFURLResponseSerialization.m 258行修改 responseString = [responseString str ...

  5. CSS3制作的一款按钮特效

    /*.btn { width:230px; height:70px; font-size:70px; font-weight:bold; overflow:hidden; font: "He ...

  6. ios 使用NSRegularExpression解析正则表达式

    初始化一个   NSRegularExpression 对象 注:_str是要匹配的字符串 NSRegularExpression *regex = [NSRegularExpression regu ...

  7. Luogu P4593 [TJOI2018]教科书般的亵渎

    亵渎终于离开标准了,然而铺场快攻也变少了 给一个大力枚举(无任何性质)+艹出自然数幂和的方法,但是复杂度极限是\(O(k^4)\)的,不过跑的好快233 首先简单数学分析可以得出\(k=m+1\),因 ...

  8. Kernel Stack Overflow(转)

    0x00 漏洞代码 stack_smashing.c #include <linux/init.h> #include <linux/module.h> #include &l ...

  9. javaEE(17)_邮件原理与JavaMail开发

    一.Java邮件开发介绍 为什么要学习javamail开发 •现在很多WEB应用在开发时都需要集成邮件发送功能,例如: •给新注册的用户自动发送一封包含其注册信息的欢迎E-Mail. •给过生日的注册 ...

  10. CentOS 6.6 安装nfs网络文件系统

    http://www.linuxidc.com/Linux/2015-06/119370.htm   ####搭建 http://blog.csdn.net/liumiaocn/article/det ...