結果
問題 |
No.430 文字列検索
|
ユーザー |
|
提出日時 | 2025-07-26 14:38:13 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,172 bytes |
コンパイル時間 | 2,125 ms |
コンパイル使用メモリ | 204,160 KB |
実行使用メモリ | 7,716 KB |
最終ジャッジ日時 | 2025-07-26 14:38:17 |
合計ジャッジ時間 | 3,905 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge6 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 13 WA * 1 |
ソースコード
#include <bits/stdc++.h> using namespace std; #define rep(i,n) for (int i = 0; i< (n); ++i) #define repi(i, a, b) for (int i = (a); i < (b); ++i) #define all(x) (x).begin(), (x).end() #define fore(i, a) for(auto &i:a) using ll = long long; struct roling_hash{ vector<ll> H, B; ll n, b, mod; string s; roling_hash(string s_,ll b_, ll mod_){ s = s_;b = b_; mod = mod_; n = s.size()+1; H.assign(n,0); B.assign(n,0); H[0] = 0; B[0] = 1; repi(i, 1, n){ H[i] = (b*H[i-1]%mod+s[i-1])%mod; B[i] = B[i-1]*b%mod; } } ll get_hash(ll l,ll r){ return (H[r+1] - B[r-l+1]*H[l]%mod+mod)%mod; } ll get_hash(string t){ ll res=0; ll sz = t.size(); rep(i, sz){ res += B[sz-1-i]*t[i]%mod; res %= mod; } return res; } }; int main() { string s; ll m; cin >> s >> m; ll b = 32494483, mod = (1LL << 31)-1; set<ll> h; roling_hash RH(s, b, mod); rep(i, m){ string c; cin >> c; h.insert(RH.get_hash(c)); } ll ans = 0; rep(i, 10){ ll l = 0,r = l+i; while(r < s.size()){ if(h.count(RH.get_hash(l, r)))ans++; l++;r++; } } cout << ans << endl; }