字串hash fzu 2137 奇異字串

2021-06-19 04:00:43 字數 1266 閱讀 6593

1.利用unsigned long long 越界取模

2.題意的奇異串是axa,就是x旁邊兩個串是要一樣的,不是相反的。注意x不能在a中出現,根據這個,a的範圍只可能在x與上乙個字母x之間,可以直接列舉。這樣對於乙個字母x,總的列舉複雜度是o(n)的,最多26種字母,總複雜度o(26*n)。列舉後判斷是否一樣可以用hash,或者字尾陣列。

#include #include #include #include #include #include #include #include #include #include #include using namespace std;

typedef long long ll;

#define debug(x) (cerr << #x << " = " << (x) << endl)

#define debug2(x, y) (cerr << #x << " = " << (x) << ", " << #y << " = " << (y) << endl)

templateinline t& rd(t &x)

const int inf = 0x3f3f3f3f;

const int maxn = 100005;

typedef unsigned long long uint;

const uint magic = 131;

uint h[maxn];

uint base[maxn];

void init_hash(string s)

base[0] = 1;

for(int i=1;i<=l;i++)

}// 子串[l,r)的hash值 編號從0開始

uint hash(int l,int r)

/*example

字串1234567890 magic = 10

hash[2,4)

h[0:9] = [0, 1, 12, 123,1234, 12345, ....];

h[r] = h[4] = 1234

h[l] = h[2] = 12

hash[l,r) = 1234 - 12*base[4-2] = 34;

*/string s;

int main()

if(hash(front,i) == hash(i+1,tail+1))

front --,tail ++;

}} printf("%i64u\n", ans);

} return 0;

}

FZU 2137 奇異字串 字尾樹組 RMQ

題目連線 題解 列舉x位置,向左右延伸計算答案 如何計算答案 對字串建立sa,那麼對於想雙延伸的長度l,假如有lcp i l,i 1 l那麼就可以更新答案 複雜度 建立sa,lcp等nlogn,列舉x及向兩邊延伸26 n include include include include include...

愛奇藝校招 字串價值(python)

有一種有趣的字串價值計算方式 統計字串中每種字元出現的次數,然後求所有字元次數的平方和作為字串的價值 例如 字串 abacaba 裡面包括4個 a 2個 b 1個 c 於是這個字串的價值為4 4 2 2 1 1 21 牛牛有乙個字串s,並且允許你從s中移除最多k個字元,你的目標是讓得到的字串的價值最...

ORACLE in 字串,字串,字串

因為傳進來的引數是 字串,字串,字串,要實現in 字串,字串,字串 select from htl price p where p.hotel id 30073328 and p.able sale date between to date 2009 03 27 yyyy mm dd and to ...