這題由於這週六考大物,整整拖了一周時間,一開始寫的我估計也沒什麼大問題,細節比較多:
1.字元陣列直接寫成int陣列,並且最後一位s[n]=0,來維護sa陣列,height陣列(記錄lcs),rank陣列;
2.二分的技巧,也看到了很多;
3.看來劉汝佳的書寫的也不是很完美,對於字尾陣列雖然給了標程,但是具體怎麼使用,要注意哪些細節並沒有給出提示,好在還有一篇國家隊**可以看,**裡講的就比較詳細。
恩!第一道字尾陣列。
#include #include #include #include using namespace std;
#define n 200
#define maxn 200000
//correct
int s[maxn];
int sa[maxn], source[maxn], flag[n];
int rank[maxn],height[maxn];
int t[maxn], t2[maxn], c[maxn];
int n, js;
void build_sa(int n,int m)
}void getheight()
cnt++;}}
else
cnt++;}}
else
return false;
}void del()
else q=mid-1;
}print(ans);
}return 0;
}
uva11107 字尾陣列
給定n個字串,求長度最大的字串 不一定是原字元 在超過一半的字串中連續出現 1.將n個字串通過特殊字元連線起來,合成乙個文字串。題目轉化為尋找匹配點的對應字串個數超過n 2的最長字串 2.二分答案求出最大值。二分最大值的基礎 如果對於x成立,則對於不大於x的所有值都成立,則可以二分最大值 3.判斷是...
UVA 11107 生命的形式(字尾陣列 LCP)
把所有輸入的字串拼起來,二分答案,每次判斷是否有乙個長度為p的串在超過一半的串中連續出現,判斷方法是掃瞄height陣列,因為height陣列中,相同串長度都聚集在一起。includeusing namespace std const int maxn 100005 char s maxn int ...
字尾樹 字尾陣列
在字串處理當中,字尾樹和字尾陣列都是非常有力的工具,其中字尾樹大家了解得比較多,關於字尾陣列則很少見於國內的資料。其實字尾陣列是字尾樹的乙個非 常精巧的替代品,它比字尾樹容易程式設計實現,能夠實現字尾樹的很多功能而時間複雜度也不太遜色,並且,它比字尾樹所占用的空間小很多。可以說,在資訊學競賽 中字尾...