Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <vector>
- #include <string>
- using namespace std;
- typedef unsigned long long ull;
- int main() {
- ifstream fin("input.txt");
- ofstream fout("output.txt");
- string str;
- fin >> str;
- int size = str.size();
- vector<ull> pw(size);
- pw[0] = 1;
- vector<ull> dm(size);
- dm[0] = str[0];
- for (int i = 1; i < str.size(); i++) {
- pw[i] = pw[i - 1] * 257;
- dm[i] = dm[i - 1] + str[i] * pw[i];
- }
- int n; fin >> n;
- vector<pair<int, ull>> dict(n);
- for (int i = 0; i < n; i++) {
- string s; fin >> s;
- for (int j = 0; j < s.size(); j++) dict[i].second += s[j] * pw[j];
- dict[i].first = s.size();
- }
- vector<int> dp(size + 1);
- dp[size] = 1;
- for (int i = size - 1; i >= 0; i--) {
- for (int j = 0; j < n; j++) {
- if (i + dict[j].first <= size &&
- dict[j].second * pw[i] == dm[i + dict[j].first-1] - (i-1>=0?dm[i-1]:0)) {
- dp[i] += dp[i + dict[j].first];
- }
- }
- }
- fout << dp[0] << endl;
- fin.close();
- fout.close();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment