Advertisement
Guest User

Untitled

a guest
Jan 21st, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.41 KB | None | 0 0
  1. #include <vector>
  2. #define TOMOD 1000000007
  3. using namespace std;
  4. typedef long long int ll;
  5. class MappingABC2
  6. {
  7. public:
  8. int countStrings(vector <int> t)
  9. {
  10. int i = 0; int N = t.size();
  11. int n_uniques_fltr[64] = {0}, n_uniques_frtl[64] = {0};
  12. int last_unique_fltr[64] = {0}, last_unique_frtl[64] = {0}, last_unique = 0;
  13. int used_fltr[64] = {0}, used_frtl[64] = {0};
  14.  
  15. n_uniques_fltr[0] = 1; last_unique_fltr[0] = -1; used_fltr[t[0]] = 1; last_unique = 0;
  16. for(i = 1;i < N;++i)
  17. if( used_fltr[t[i]] )
  18. {
  19. n_uniques_fltr[i] = n_uniques_fltr[i-1];
  20. last_unique_fltr[i] = last_unique;
  21. }
  22. else
  23. {
  24. used_fltr[t[i]] = 1;
  25. n_uniques_fltr[i] = n_uniques_fltr[i-1] + 1;
  26. last_unique_fltr[i] = last_unique;
  27. last_unique = i;
  28. }
  29. n_uniques_frtl[N-1] = 1; last_unique_frtl[N-1] = -1; used_frtl[t[N-1]] = 1; last_unique = N-1;
  30. for(i = N-2;i >= 0;--i)
  31. if( used[t[i]] )
  32. {
  33. n_uniques_frtl[i] = n_uniques_frtl[i+1];
  34. last_unique_frtl[i] = last_unique;
  35. }
  36. else
  37. {
  38. used[t[i]] = 1;
  39. n_uniques_frtl[i] = n_uniques_frtl[i+1] + 1;
  40. last_unique_frtl[i] = last_unique;
  41. last_unique = i;
  42. }
  43.  
  44. ll ans = 0;
  45. for(i = 2;i < N-1;++i)
  46. if( 1 != n_uniques_fltr[i] && 1 != n_unqiues_frtl[i] )
  47. {
  48. int center = t[i];
  49. int left = 0; bool left_have_center = 0;
  50. for(left = last_unique_fltr[i];-1 != left;left = last_unique_fltr[left])
  51. {
  52. if( center == t[left] )
  53. continue;
  54. int le = t[left]; bool right_have_le = 0, right_have_center = 0;
  55. for(int right = last_unique_frtl[i];-1 != right;right = last_unique_frtl[right])
  56. if( center == t[right] )
  57. {
  58. right_have_center = 1;
  59. }
  60. else if( t[right] == le )
  61. {
  62. right_have_le = 1;
  63. }
  64. ans = (ans + n_unique_frtl[i+1] - right_have_le - right_have_center) % TOMOD;
  65. }
  66. }
  67. }
  68. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement