zoukankan      html  css  js  c++  java
  • [CTSC2014]企鹅QQ

    题意

    Here

    思考

    这其实是一道哈希模板题,题目定义“相似串”:两字符串只有一处不同。

    很容易想到哈希,我们枚举每一位,将该位的哈希值删除后重新比较两串即可,主要实现也很简单,主要类比进制就好了。((ps) :我再也不相信单模数哈希了),如何记录答案?肯定不能 (n^2) 记录啦,将去掉某位的哈希值排序,再顺着扫一遍即可,具体细节见代码

    代码

    #include<bits/stdc++.h>
    using namespace std;
    typedef unsigned long long ll;
    ll base = 131;
    char s[30030][205];
    ll S, ans, B[30030], H[30030][205], n, len, cnt, tmp[30030];
    void init(){
        B[0] = 1;
        for(int i=1; i<=len; i++) B[i] = (B[i-1] * base);
        for(int i=1; i<=n; i++){
            for(int j=1; j<=len; j++){
                H[i][j] = (H[i][j-1] * base + s[i][j]);
            }
        }
    }
    int main(){
        cin >> n >> len >> S;
        for(int i=1; i<=n; i++){
            cin >> s[i] + 1;
        }
        init();
        for(int j=1; j<=len; j++){
            for(int i=1; i<=n; i++){
                tmp[i] = H[i][j-1] * B[len-j] + H[i][len] - H[i][j] * B[len-j];
            }
            sort(tmp+1, tmp+n+1);
            int sum = 1;
            for(int i=1; i<=n; i++){
                if(tmp[i] == tmp[i-1]) ans += sum, sum ++;
                else sum = 1;
            }
        }
        cout << ans;
        return 0;
    }
    
    

    总结

    以后自然溢出/最好双哈希

  • 相关阅读:
    Spring&AOP&JDK和Cglib动态代理&AspectJ进行AOP开发(XML方式)
    python 切换工作目录
    python 布隆过滤器
    python sys.path.append()
    python encrypt 实现AES加密
    python 魔术方法
    python re匹配中文和非中文
    python 文件整理 shutil
    python定时任务框架
    mac 系统修改环境变量
  • 原文地址:https://www.cnblogs.com/alecli/p/9906113.html
Copyright © 2011-2022 走看看