UVA 11107 生命的形式(字尾陣列 LCP)

2021-10-05 20:44:49 字數 916 閱讀 8858

把所有輸入的字串拼起來,二分答案,每次判斷是否有乙個長度為p的串在超過一半的串中連續出現,判斷方法是掃瞄height陣列,因為height陣列中,相同串長度都聚集在一起。

#includeusing namespace std;

const int maxn=100005;

char s[maxn];

int sa[maxn],t[maxn],t2[maxn],c[maxn];

int belong[maxn];

int n;

vectorpos[1005];

void build(char *s,int n,int m) }

int rank[maxn],height[maxn];

void getheight(int n)

if(cnt>(n>>1))

}} else

memset(vis,0,sizeof(vis)),vis[belong[sa[i]]]=1,in=false,cnt=1;

}return ret;

}char in[maxn];

int main()

n--;

s[n] = 0;

build(s, n + 1, 130);

getheight( n);

int l = 0, r = 1000, ans = 0, mid;

while(l <= r)//二分查詢最大的長度mid

else

r = mid - 1;

}if(ans == 0)

printf("?\n");

else

for(unsigned int i = 0; i < pos[ans].size(); i++)

}return 0;

}

UVa11107 字尾陣列

這題由於這週六考大物,整整拖了一周時間,一開始寫的我估計也沒什麼大問題,細節比較多 1.字元陣列直接寫成int陣列,並且最後一位s n 0,來維護sa陣列,height陣列 記錄lcs rank陣列 2.二分的技巧,也看到了很多 3.看來劉汝佳的書寫的也不是很完美,對於字尾陣列雖然給了標程,但是具體...

uva11107 字尾陣列

給定n個字串,求長度最大的字串 不一定是原字元 在超過一半的字串中連續出現 1.將n個字串通過特殊字元連線起來,合成乙個文字串。題目轉化為尋找匹配點的對應字串個數超過n 2的最長字串 2.二分答案求出最大值。二分最大值的基礎 如果對於x成立,則對於不大於x的所有值都成立,則可以二分最大值 3.判斷是...

5 12生命的紀念 點滴在心

有時總是太感性,倔強的想讓整個世界陪著一起憂傷。有時覺得除了青春,我們一無所有,人與人總在各自的城市裡孤單,孤單的每一天繼續如此 而我們除了努力我們還是要努力,哪怕有時我們要乙個人默默的付出 默默地承受孤寂。今天幾個朋友聚會時,喝的各種顏色的飲料,才發現各種色彩在玻璃杯的襯托下都能那麼美麗。而我們的...