zoukankan      html  css  js  c++  java
  • UVA 12338 Anti-Rhyme Pairs(hash + 二分)题解

    题意:给出两个字符串的最大相同前缀。

    思路:hash是要hash,不hash是不可能的。hash完之后从头遍历判断超时然后陷入沉默,然后告诉我这能二分orz,二分完就过了,写二分条件写了半天。不要用数组储存hash值,会爆,开vector就行。

    代码:

    #include<stack>
    #include<vector>
    #include<queue>
    #include<set>
    #include<cstring>
    #include<string>
    #include<sstream>
    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    #define ll long long
    #define ull unsigned long long
    using namespace std;
    const int maxn = 100000+10;
    const int seed = 131;
    const int MOD = 100013;
    const int INF = 0x3f3f3f3f;
    vector<ull> ha[maxn];
    int len[maxn];
    char s[10005];
    void HASH(int x){
        len[x] = strlen(s + 1);
        ha[x].clear();
        ha[x].push_back(0);
        for(int i = 1; i <= len[x]; i++){
            ha[x].push_back(ha[x][i - 1] * seed + s[i]);
        }
    }
    int main(){
        int T, Case = 1;
        scanf("%d", &T);
        while(T--){
            int n;
            scanf("%d", &n);
            for(int i = 1;i <= n;i++){
                scanf("%s", s + 1);
                HASH(i);
            }
            int q;
            printf("Case %d:
    ", Case++);
            scanf("%d", &q);
            while(q--){
                int u, v;
                scanf("%d%d", &u, &v);
                int l = 1, r = min(len[u], len[v]), m, ans = 0;
                while(l <= r){
                    m = (l + r) / 2;
                    if(ha[u][m] == ha[v][m]){
                        l = m + 1;
                        ans = m;
                    }
                    else r = m - 1;
                }
                printf("%d
    ", ans);
            }
        }
        return 0;
    }
    /*
    Sample Input
    2
    5
    daffodilpacm
    daffodiliupc
    distancevector
    distancefinder
    distinctsubsequence
    4
    1 2
    1 5
    3 4
    4 5
    2
    acm
    icpc
    2
    1 2
    2 2
    Sample Output
    Case 1:
    8
    1
    8
    4
    Case 2:
    0
    4
    */
  • 相关阅读:
    尽可能的降低重复劳动——模板策略
    一个CSS上中下三行三列结构的Div布局
    程序员那些悲催的事儿
    给NSString增加Java风格的方法
    DIV和table页面布局的区别和联系
    cocos2d播放雪花
    时间复杂度和空间复杂度2 数据结构和算法04
    OD使用教程4 调试篇04|解密系列
    OD使用教程5 调试篇05|解密系列
    PE结构简图
  • 原文地址:https://www.cnblogs.com/KirinSB/p/9524026.html
Copyright © 2011-2022 走看看