[POJ 1200] Crazy Search (水题)

原创 2016年08月30日 20:31:30

链接

POJ 1200


题意

给出整数N和NC,给出字符串,字符串的字符集大小为NC,求该字符串长度为N的子串种类。


思路

字符串哈希的裸题,对长度为N的子串求哈希值,存储并判重即可。


代码

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
typedef unsigned long long ulint;

#define maxn (40000000)
bool vis[maxn];

char s[1000000];
int xp[1000000];
int slen, w[256];

int N, NC;
int cal()
{
    int h = 0, ans = 0;
    for(int i = 0; i < N; i++)
    {
        h *= NC;
        h += w[s[i]];
    }
    ans++;
    vis[h] = true;

    for(int i = N; i < slen; i++)
    {
        h = (h - w[s[i-N]] * xp[N-1]) * NC + w[s[i]];
        if(!vis[h])
        {
            vis[h] = true;
            ans++;
        }
    }
    return ans;
}

int main()
{
    //freopen("1200.txt", "r", stdin);

    while(cin >> N >> NC)
    {
        if(!N)
        {
            cout << 0 << endl;
            continue;
        }

        xp[0] = 1;
        for(int i = 1; i < N; i++)
        {
            xp[i] = xp[i-1] * NC;
        }

        scanf("%s", s);
        slen = strlen(s);
        memset(w, -1, sizeof(w));
        memset(vis, false, sizeof(vis));

        int cnt = 0;

        for(int i = 0; i < slen; i++)
        {
            if(w[s[i]] < 0) w[s[i]] = cnt++;
        }

        cout << cal() << endl;
    }
    return 0;
}
版权声明:想转就转吧,反正也是人人都会的东西:-(

Crazy Search(POJ1200)

DescriptionMany people like to solve hard puzzles some of which may lead them to madness. One such p...
  • NaCl__
  • NaCl__
  • 2015年07月25日 10:15
  • 225

poj 1200 Crazy Search 哈希

简单的哈希的题目 注意题目已经说明所有的nc个字符的排列组合的数不会超过16Million ,细节可以见代码的实现 /********************* PRO: poj 1200 TIT...

poj1200 Crazy Search

@(K ACMer)题意:给你一个字符串,其中由nc个不同的字符组成.问你它的长度为n的不同的子序列有多少个?分析: 咋一看最直接的想法就是每一个子串都加入set中,然后最后看set中有多少个字符串就...

poj1200 Crazy Search,字符串hash or 后缀数组

题目说了构成的字符串最多不会超过16000000,所以才能用这样的hash方法。

POJ - 1200Crazy Search(哈希|hash)

Crazy SearchTime Limit: 1000MS Memory Limit: 65536K Total Submissions: 29445 Accepted: ...

hash&Rabin-Karp字符串查找POJ 1200 Crazy Search

hash&Rabin-Karp字符串查找POJ 1200 Crazy Search

POJ1200 Crazy Search(hash)

题意: 给一个有nc种字符的字符串,要求它有几个大小为n的子串。 要点: 字符串长度可以是16000000但字符总数最多300,所以hash是必不可少的。先将nc种字符一一对应到hash数组中,...

poj 1200 Crazy Search

超内存:有时候写一个memset,也可能造成超内存的现象: 题目大概意思是:n 代表字串的长度,nc 代表给出的字符串中含有的字符种类数 再给出一个字符串 找出在这个字符串中长度为n 的不同的字串的...

POJ 1200 Crazy Search

这个题...我实在是不知道0ms的程序是怎么搞的,不过这个题的数据的确有点虚张声势==!/* pku 1200 crazy search macro 还是要比函数快一些的... */ #in...

POJ 1200 Crazy Search(HASH)

12857431 lx_Zz 1200 Accepted 64024K 125MS G++ 1009B 2014-05-09 21:00:43
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[POJ 1200] Crazy Search (水题)
举报原因:
原因补充:

(最多只允许输入30个字)