把所有輸入的字串拼起來,二分答案,每次判斷是否有乙個長度為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生命的紀念 點滴在心
有時總是太感性,倔強的想讓整個世界陪著一起憂傷。有時覺得除了青春,我們一無所有,人與人總在各自的城市裡孤單,孤單的每一天繼續如此 而我們除了努力我們還是要努力,哪怕有時我們要乙個人默默的付出 默默地承受孤寂。今天幾個朋友聚會時,喝的各種顏色的飲料,才發現各種色彩在玻璃杯的襯托下都能那麼美麗。而我們的...