Advertisement
Guest User

Untitled

a guest
Dec 8th, 2019
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.29 KB | None | 0 0
  1. #include <iostream>
  2. #include <unordered_map>
  3. using namespace std;
  4.  
  5. struct Node {
  6. int counter;
  7. unordered_map<char, Node*> children;
  8. Node() :counter(0) {}
  9. };
  10.  
  11. struct Trie { Node* root = new Node();
  12. void insert(const string& word) {
  13. Node* curr = root;
  14. curr->counter++;
  15. int len((int)word.size()), i;
  16.  
  17. for (i = 0; i < len; ++i) {
  18. if (curr->children.count(word[i]) == 0)
  19. curr->children[word[i]] = new Node;
  20. curr = curr->children[word[i]];
  21. curr->counter++;
  22. }
  23. }
  24.  
  25. size_t countWords(string& prefix) {
  26. Node* curr = root;
  27. int len(prefix.length()), i;
  28.  
  29. for (i = 0;i < len;++i) {
  30. if (curr->children.count(prefix[i]) == 0) return 0;
  31. curr = curr->children[prefix[i]];
  32. }
  33. return curr->counter;
  34. }
  35. };
  36.  
  37. int main() {
  38. cin.tie(nullptr);
  39. cin.sync_with_stdio(false);
  40. Trie autoComplete;
  41.  
  42. int N, Q, i; cin >> N >> Q;
  43. string word, prefix;
  44.  
  45. for (i = 0; i < N; ++i) { cin >> word;
  46. autoComplete.insert(word);
  47. }
  48. while (Q--) { cin >> prefix;
  49. cout << autoComplete.countWords(prefix) << '\n';
  50. } return 0;
  51. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement