[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...

POJ 1200 Crazy Search

哈希表

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方法。

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 hash入门

Crazy Search Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 26383   Accepted: 73...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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