File tree Expand file tree Collapse file tree 3 files changed +12
-27
lines changed Expand file tree Collapse file tree 3 files changed +12
-27
lines changed Original file line number Diff line number Diff line change 55
66
77ll pw (ll a , ll b ) {
8- if (b == 0 ) {
9- return 1 ;
10- }
11-
8+ if (b == 0 ) return 1 ;
129 ll v = pw (a , b / 2 );
13- v = (v * v ) % MOD ;
14-
15- if (b & 1 ) {
16- v = (v * a ) % MOD ;
17- }
18-
10+ v = (v * v ) % mod ;
11+ if (b & 1 ) v = (v * a ) % mod ;
1912 return v ;
2013}
Original file line number Diff line number Diff line change 1- // z function returns an array of size |s| which i'th number shows size of longest prefix of t starting from this index of s
2- // O(|s| + |t|)
3-
4- // t is the pattern you are looking for in s
5- vi zf (string s, string t) {
6- int n = s.size (), m = t.size ();
7- s = t + ' #' + s;
8- vi z (n + m + 1 );
9- int l = 0 , r = 1 ;
10- for (int i = 1 ; i <= n + m; i++) {
11- if (i < r) z[i] = min (z[i - l], r - i);
12- while (i + z[i] <= n + m && s[i + z[i]] == s[z[i]]) z[i]++;
13- if (i + z[i] > r)
14- tie (l, r) = ii (i, i + z[i]);
1+ vi z_function (string s) {
2+ int n = s.size ();
3+ vi z (n);
4+ for (int i = 1 , l = 0 , r = 0 ; i < n; ++i) {
5+ if (i <= r) z[i] = min (r - i + 1 , z[i - l]);
6+ while (i + z[i] < n && s[z[i]] == s[i + z[i]]) ++z[i];
7+ if (i + z[i] - 1 > r) l = i, r = i + z[i] - 1 ;
158 }
16- vi ret_z (n);
17- forn (i, n) ret_z[i] = z[i + m + 1 ];
18- return ret_z;
9+ return z;
1910}
Original file line number Diff line number Diff line change @@ -25,6 +25,7 @@ typedef vector<vii> vvii;
2525#define all (a ) (a).begin(), (a).end()
2626#define inf 1000000000
2727#define eps 1e-9
28+ mt19937 rng32 (chrono::steady_clock::now().time_since_epoch().count());
2829
2930int main () {
3031 ios::sync_with_stdio (0 );
You can’t perform that action at this time.
0 commit comments