Untitled
unknown
plain_text
a year ago
932 B
5
Indexable
#include <bits/stdc++.h> using namespace std; void init() { cin.tie(0); cin.sync_with_stdio(0); } #pragma GCC optimize("03") #pragma GCC target("tune=native") #pragma GCC optimize("unroll-loops") string s; map<string, int> fre; vector<int> sizes; const int max_ = 1e5 + 5, mod = 1e9 + 7; int dp[max_]; int main() { init(); // freopen("t.text", "r", stdin); // freopen("o.text", "w", stdout); set<int> si; int n; cin >> n; while (n--) { cin >> s; fre[s]++; si.emplace(s.size()); } for(auto &it : si) sizes.push_back(it); cin >> s; dp[s.size()] = 1; for (int i = s.size() - 1; i > -1; i--) { string t = ""; t += s[i]; int k = i + 1; for (int j = 0; j < sizes.size(); j++) { auto &ret = dp[i]; if (i + sizes[j] > s.size()) break; while (t.size() < sizes[j]) t += s[k], k++; ret += fre.count(t) * dp[i + sizes[j]]; ret %= mod; } } cout << dp[0]; return 0; }
Editor is loading...
Leave a Comment