Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

字符串哈希+二分搜索=813MS 险过,1A留念

Posted by vjubge4 at 2019-06-06 21:02:31 on Problem 2217
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef unsigned long long ull;
char *str1, *str2;
ull F1[10001], F2[10001];
int L1, L2;
ull Base[10001];
const ull B = 100000007;

bool Judge(int mid){
    for(int i = 0, j = i + mid; j <= L1; i ++, j ++){
        ull t = F1[j] - F1[i] * Base[mid];
        for(int l = 0, r = l + mid; r <= L2; l ++, r ++){
            ull nt = F2[r] - F2[l] * Base[mid];
            if(nt == t){
                return true;
            }
        }
    }
    return false;
}

int main(){
    Base[0] = 1;
    for(int i = 1; i <= 10000; i ++){
        Base[i] = Base[i - 1] * B;
    }
    str1 = new char[10001];
    str2 = new char[10001];
    int Num;
    scanf("%d", &Num);
    getchar();
    for(int num = 0; num < Num; num ++){
        gets(str1);
        gets(str2);
        L1 = strlen(str1);
        L2 = strlen(str2);
        if(L2 < L1){
            swap(L1, L2);
            swap(str1, str2);
        }
        F1[0] = 0;
        for(int i = 1; i <= L1; i ++){
            F1[i] = F1[i - 1] * B + str1[i - 1];
        }
        F2[0] = 0;
        for(int i = 1; i <= L2; i ++){
            F2[i] = F2[i - 1] * B + str2[i - 1];
        }
        int lb = 0, ub = L1;
        int ans = 0;
        while(ub >= lb){
            int mid = (ub + lb) >> 1;
            if(Judge(mid)){
                ans = mid;
                lb = mid + 1;
            } else {
                ub = mid - 1;
            }
        }
        printf("Nejdelsi spolecny retezec ma delku %d.\n", ans);
    }
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator