raghuvanshraj

Untitled

Feb 18th, 2020
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.91 KB | None | 0 0
  1. /**
  2.  *    author:   raghuvanshraj
  3.  *    created:  18.02.2020 06:54:07 PM
  4. **/
  5. #include <bits/stdc++.h>
  6.  
  7. #define MOD 1000000007
  8.  
  9. #define init_arr(arr,n,val) for (int i = 0; i < n; ++i) arr[i] = val
  10. #define init_arr2d(arr,n,m,val) for (int i = 0; i < n; ++i) for (int j = 0; j < m; ++j) arr[i][j] = val
  11. #define init_arr3d(arr,n,m,l,val) for (int i = 0; i < n; ++i) for (int j = 0; j < n; ++j) for (int k = 0; k < l; ++k) arr[i][j][k] = val
  12. #define input_arr(arr,n) for (int i = 0; i < n; ++i) cin >> arr[i];
  13. #define input_arr2d(arr,n,m) for (int i = 0; i < n; ++i) for (int j = 0; j < m; ++j) cin >> arr[i][j];
  14. #define input_arr3d(arr,n,m,l,val) for (int i = 0; i < n; ++i) for (int j = 0; j < n; ++j) for (int k = 0; k < l; ++k) cin >> arr[i][j][k];
  15. #define print_arr(arr,n) for (int i = 0; i < n; ++i) cout << arr[i] << ' '; cout << endl
  16. #define print_arr2d(arr,n,m) for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) cout << arr[i][j] << ' '; cout << endl; }
  17.  
  18. #define all(v) v.begin(), v.end()
  19. #define dec(a,t,n) t *a = new t[n]()
  20. #define dec2d(a,t,n,m) t **a = new t*[n](); for (int i = 0; i < n; ++i) a[i] = new t[m]()
  21. #define pb push_back
  22. #define mp make_pair
  23. #define ff first
  24. #define ss second
  25.  
  26. using namespace std;
  27.  
  28. typedef long long ll;
  29. typedef unsigned long ul;
  30. typedef unsigned long long ull;
  31. typedef long double ld;
  32. typedef vector<int> vi;
  33. typedef vector<string> vs;
  34. typedef queue<int> qi;
  35. typedef priority_queue<int> max_heap;
  36. typedef priority_queue<int, vector<int>, greater<int>> min_heap;
  37. typedef pair<int,int> pii;
  38. typedef pair<string,int> psi;
  39. typedef map<string,int> msi;
  40. typedef map<int,int> mii;
  41. typedef unordered_map<string,int> umsi;
  42. typedef unordered_map<int,int> umii;
  43. typedef set<int> si;
  44. typedef unordered_set<int> usi;
  45.  
  46. template <
  47.     typename T,
  48.     typename = typename enable_if<is_arithmetic<T>::value, T>::type,
  49.     typename U,
  50.     typename = typename enable_if<is_arithmetic<T>::value, T>::type
  51. >
  52. pair<T,U> operator+(const pair<T,U> &a, const pair<T,U> &b) {
  53.     return {a.first + b.first, a.second + b.second};
  54. }
  55.  
  56. template <
  57.     typename T,
  58.     typename = typename enable_if<is_arithmetic<T>::value, T>::type,
  59.     typename U,
  60.     typename = typename enable_if<is_arithmetic<T>::value, T>::type
  61. >
  62. pair<T,U> operator-(const pair<T,U> &a, const pair<T,U> &b) {
  63.     return {a.first - b.first, a.second - b.second};
  64. }
  65.  
  66. int main(int argc, char const *argv[]) {
  67.     ios::sync_with_stdio(false);
  68.     cin.tie(0);
  69.    
  70.     int n,k;
  71.     cin >> n >> k;
  72.     string s;
  73.     cin >> s;
  74.     set<char> available;
  75.     while (k--) {
  76.         char ch;
  77.         cin >> ch;
  78.         available.insert(ch);
  79.     }
  80.  
  81.     vector<int> end_here(n);
  82.     init_arr(end_here, n, i+1);
  83.     int curr_minus = 0;
  84.     for (int i = 0; i < n; ++i) {
  85.         end_here[i] -= curr_minus;
  86.         if (available.find(s[i]) == available.end()) {
  87.             end_here[i] = 0;
  88.             curr_minus = i+1;
  89.         }
  90.     }
  91.  
  92.     long ans = 0;
  93.     for (int i = 0; i < n; ++i) {
  94.         ans += (long)end_here[i];
  95.     }
  96.  
  97.     cout << ans;
  98.    
  99.     return 0;
  100. }
Add Comment
Please, Sign In to add comment