Untitled
unknown
plain_text
a year ago
932 B
8
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