Kyopro Library
 
読み取り中…
検索中…
一致する文字列を見つけられません
rolling_hash_2d.hpp
[詳解]
1/// @attention 未verify
3 RollingHash2D()=default;
5
6 RollingHash2D(const vector<string>& s) {
7 int h=s.size(), w=s[0].size();
8 hash=vector<vector<Hash>>(h,vector<Hash>(w+1));
9 for(int i=1; i<=h; i++) for(int j=1; j<=w; j++) {
10 hash[i][j]=Hash(s[i-1][j-1]).shift(i-1).shift(j-1)+hash[i][j-1]+hash[i-1][j]-hash[i-1][j-1];
11 }
12 }
13
14 Hash get(int l, int r, int u, int d) {
15 Hash ret=hash[r][d]-hash[l][d]-hash[r][u]+hash[l][u];
16 ret=ret.shift(-l).shift(-u);
17 return ret;
18 }
19};
vector< vector< Hash > > hash
RollingHash2D()=default
RollingHash2D(const vector< string > &s)
Hash get(int l, int r, int u, int d)