栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

poj 1743 Musical Theme

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

poj 1743 Musical Theme

#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>using namespace std;#define N 20004int s[N], f[N];int n, sa[N], height[N], rank[N], tmp[N], top[N];void makesa(){    int i, j, len, na;    na = (n <256?256 : n);    memset(top, 0, na *sizeof(int));    for (i =0; i < n; i++)        top[rank[i] = s[i] &0xff]++;    for (i =1; i < na; i++)        top[i] += top[i -1];    for (i =0; i < n; i++)        sa[--top[rank[i]]] = i;    for (len =1; len < n; len <<=1)    {        for (i =0; i < n; i++)        { j = sa[i] - len; if (j <0)     j += n; tmp[top[rank[j]]++] = j;        }        sa[tmp[top[0] =0]] = j =0;        for (i =1; i < n; i++)        { if (rank[tmp[i]] != rank[tmp[i -1]] || rank[tmp[i] + len]         != rank[tmp[i -1] + len])     top[++j] = i; sa[tmp[i]] = j;        }        memcpy(rank, sa, n *sizeof(int));        memcpy(sa, tmp, n *sizeof(int));        if (j >= n -1) break;    }}void lcp(){    int i, j, k;    for (j = rank[height[i = k =0] =0]; i < n -1; i++, k++)        while (k >=0&& s[i] != s[sa[j -1] + k]) height[j] = (k--), j = rank[sa[j] +1];}bool ok(int d){    int l = sa[0], r = sa[0];    for (int i =0; i < n; i++)    {        if (height[i] < d)        { l = sa[i]; r = sa[i]; continue;        }        if (sa[i] < l) l = sa[i];        if (sa[i] > r) r = sa[i];        if (r - l > d) return true;    }    return false;}int binarysearch(){    int l =0;    int r = n;    while (l < r)    {        int mid = (l + r) /2+ ((l + r) &1);        if (ok(mid)) l = mid;        else r = mid -1;    }    return l;}int main(){    while (scanf("%d", &n), n)    {        for (int i =0; i < n; i++) scanf("%d", &f[i]);        for (int i =0; i < n -1; i++) s[i] = f[i +1] - f[i];        makesa();        lcp();        int ans = binarysearch();        if (ans >=4) printf("%dn", ans +1);        else printf("0n");    }    return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/371693.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号