Raslboyy

dz

Sep 25th, 2019
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.00 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <vector>
  4. #include <string>
  5.  
  6. using namespace std;
  7.  
  8. typedef unsigned long long ull;
  9.  
  10. int main() {
  11.     ifstream fin("input.txt");
  12.     ofstream fout("output.txt");
  13.  
  14.     string str;
  15.     fin >> str;
  16.     int size = str.size();
  17.     vector<ull> pw(size);
  18.     pw[0] = 1;
  19.     vector<ull> dm(size);
  20.     dm[0] = str[0];
  21.     for (int i = 1; i < str.size(); i++) {
  22.         pw[i] = pw[i - 1] * 257;
  23.         dm[i] = dm[i - 1] + str[i] * pw[i];
  24.     }
  25.     int n; fin >> n;
  26.     vector<pair<int, ull>> dict(n);
  27.     for (int i = 0; i < n; i++) {
  28.         string s; fin >> s;
  29.         for (int j = 0; j < s.size(); j++) dict[i].second += s[j] * pw[j];
  30.         dict[i].first = s.size();
  31.     }
  32.     vector<int> dp(size + 1);
  33.     dp[size] = 1;
  34.     for (int i = size - 1; i >= 0; i--) {
  35.         for (int j = 0; j < n; j++) {
  36.             if (i + dict[j].first <= size &&
  37.                 dict[j].second * pw[i] == dm[i + dict[j].first-1] - (i-1>=0?dm[i-1]:0)) {
  38.                 dp[i] += dp[i + dict[j].first];
  39.             }
  40.         }
  41.     }
  42.     fout << dp[0] << endl;
  43.  
  44.     fin.close();
  45.     fout.close();
  46.     return 0;
  47. }
Advertisement
Add Comment
Please, Sign In to add comment