Advertisement
Guest User

Untitled

a guest
Feb 21st, 2018
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.00 KB | None | 0 0
  1. #pragma comment(linker, "/STACK:256000000")
  2. #define _CRT_SECURE_NO_WARNINGS
  3. #define _CRT_SECURE_NO_DEPRECATE
  4. #include<iostream>
  5. #include<cstdio>
  6. #include<cstdlib>
  7. #include<string>
  8. #include<cstring>
  9. #include<algorithm>
  10. #include<cmath>
  11. #include <set>
  12. #include <queue>
  13. #include <map>
  14. #include <vector>
  15. #include <unordered_map>
  16. #include <assert.h>
  17.  
  18. using namespace std;
  19.  
  20. #define mp make_pair
  21. #define pub push_back
  22. #define con continue
  23. #define forn(i, n) for (int i = 0; i < int(n); ++i)
  24. #define fornr(i, n) for (int i = n - 1; i >= 0; --i)
  25. #define forab(i, a, b) for (int i = (a); i <= int(b); ++i)
  26. typedef long long ll;
  27. typedef pair <int, int> pii;
  28. typedef vector <int> vi;
  29. typedef vector < pii > vii;
  30. typedef vector < vector < int> > vvi;
  31. typedef vector < vector < pair < int, int > > > vvii;
  32.  
  33. const int ZEROS = (int)(1E+5 + 100);
  34. const int INF = (int)1E+9;
  35.  
  36. struct vertex{
  37.     vertex* next[30];
  38.     int cnt;
  39.     bool is_end;
  40.     vertex() {
  41.         forn(i, 30)
  42.             next[i] = 0;
  43.         cnt = 0;
  44.         is_end = false;
  45.     }
  46. };
  47.  
  48. typedef vertex* pvertex;
  49. pvertex root;
  50. int cnt_lev[ZEROS];
  51.  
  52. void add_string(pvertex v, vi &s) {
  53.     forn(i, (int)s.size()) {
  54.         if (!v->next[s[i]]) {
  55.             v->next[s[i]] = new vertex();
  56.             cnt_lev[i + 1]++;
  57.         }
  58.         v = v->next[s[i]];
  59.         v->cnt++;
  60.     }
  61.     v->is_end = true;
  62. }
  63.  
  64. void delete_string(pvertex v, vi &s) {
  65.     forn(i, (int)s.size()) {
  66.         v = v->next[s[i]];
  67.         v->cnt--;
  68.         if (!v->cnt)
  69.             cnt_lev[i + 1]--;
  70.     }
  71. }
  72.  
  73. void solve(int type) {
  74.     if (type == 1 || type == 2) {
  75.         string S;
  76.         cin >> S;
  77.         vi s;
  78.         forn(i, (int)S.size())
  79.             s.pub(S[i] - 'a');
  80.         if (type == 1)
  81.             add_string(root, s);
  82.         else
  83.             delete_string(root, s);
  84.     }
  85.     else {
  86.         int k, ans = 0;
  87.         cin >> k;
  88.         cout << cnt_lev[k] << endl;
  89.     }
  90. }
  91.  
  92. int main() {
  93. #ifdef  _DEBUG
  94.     freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout);
  95. #endif
  96.     ios_base::sync_with_stdio(0);
  97.     cin.tie(0);
  98.  
  99.     int n, type;
  100.     cin >> n;
  101.     root = new vertex();
  102.     cnt_lev[0]++;
  103.     forn(q, n) {
  104.         cin >> type;
  105.         solve(type);
  106.     }
  107. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement