Advertisement
Guest User

Untitled

a guest
Oct 4th, 2015
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.45 KB | None | 0 0
  1. #include <cstdio>
  2. #include <algorithm>
  3. #include <cmath>
  4. #include <vector>
  5. #include <cstring>
  6. using namespace std;
  7.  
  8. const int inf = 1e9;
  9. typedef long long int64;
  10.  
  11. int64 n;
  12.  
  13. char S[1000010]; int s, k;
  14.  
  15. vector <int> L[300];
  16.  
  17. int main()
  18. {
  19. #ifdef _PLATINA
  20.     freopen("input.txt", "r", stdin);
  21. #endif
  22.     scanf("%I64d %s%d", &n, S, &k);
  23.     s = strlen(S);
  24.     int64 row, a, b; char letter;
  25.     int i;
  26.  
  27.     for(i = 0; i < s; i++){
  28.         L[ S[i] ].push_back(i);
  29.     }
  30.  
  31.     int from, to; int64 ans;
  32.  
  33.     for(i = 0; i < k; i++){
  34.         scanf("%I64d %c", &row, &letter);
  35.         a = row;
  36.         b = row - 1;
  37.         if(a % 2 == 1){
  38.             swap(a, b);
  39.         }
  40.         a = ((a / 2) % s) * 1ll * (b % s);
  41.         a %= s;
  42.         ans = (row / s) * L[letter].size();
  43.         if(row % s > 0){
  44.             from = a;
  45.             to = row % s + a - 1; to %= s;
  46.             if(from == to + 1){
  47.                 ans += L[letter].size();
  48.             }else if(from <= to){
  49.                 to = upper_bound(L[letter].begin(), L[letter].end(), to) - L[letter].begin();
  50.                 from = lower_bound(L[letter].begin(), L[letter].end(), from) - L[letter].begin();
  51.                 ans += to - from;
  52.             }else{
  53.                 to++; from--;
  54.                 to = lower_bound(L[letter].begin(), L[letter].end(), to) - L[letter].begin();
  55.                 from = upper_bound(L[letter].begin(), L[letter].end(), from) - L[letter].begin();      
  56.                 ans += L[letter].size() - (from - to);
  57.             }
  58.         }
  59.         printf("%lld\n", ans);
  60.     }
  61.     return 0;
  62. }
  63.  
  64. /*
  65.  
  66. 6
  67. JANJETINA
  68. 5
  69. 1 J
  70. 1 A
  71. 6 N
  72. 6 I
  73. 5 E
  74.  
  75.  
  76. 5
  77. A
  78. 5
  79. 1 A
  80. 2 A
  81. 3 A
  82. 4 A
  83. 5 B
  84.  
  85. 3
  86. AB
  87. 3
  88. 2 A
  89. 2 B
  90. 3 B
  91.  
  92.  
  93.  
  94. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement