摘要:
代码如下 cpp include using namespace std; const int maxn=1e6+10; inline int read(){ int x=0,f=1;char ch; do{ch=getchar();if(ch==' ')f= 1;}while(!isdigit(c 阅读全文
摘要:
题目大意:给定 N 个数,求这 N 个数中任选两个数进行异或运算,求最大的异或和是多少。 一个 int 类型的整数,可以看作一个长度为32位的字符串,异或运算不像加法,最大值不一定是由两个较大值得到。 在这里,可以采取一种树上贪心操作,即:将每个整数按照位的顺序从高位插入一棵 trie 树,并且在每 阅读全文
摘要:
字符串的最小表示是该字符串的所有循环同构串中字典序最小的那个串。 根据其循环同构结构,采用破环成链,即: 倍增 的形式来表示。 引理:若两个循环同构串$s[i+k] using namespace std; const int maxn=1e6+10; char s[maxn]; int n; vo 阅读全文
摘要:
构造后缀数组$SA[\ ]$,即对一个字符串的每个后缀按照字典序排序后得到的数组,在这里采用哈希+二分的方式优化字符串的比较部分,使得复杂度由$O(n^2 logn)\rightarrow O(n log^2n)$。 代码如下 cpp include using namespace std; con 阅读全文