Advertisement
kjmkj

Untitled

Jun 4th, 2023 (edited)
813
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.70 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. #define int long long
  5. #define double long double
  6. #define pb push_back
  7. #define randGen mt19937 rng(chrono::steady_clock::now().time_since_epoch().count())
  8.  
  9. const int INF = 1e18;
  10. const int MOD = 1e9 + 7;
  11.  
  12. signed main() {
  13.   ios_base::sync_with_stdio(false);
  14.   cin.tie(NULL);
  15.   cout.tie(NULL);
  16.   int t;
  17.   cin >> t;
  18.   while (t--) {
  19.     int n;
  20.     cin >> n;
  21.     vector<int> pref1(n, 0), pref2(n, 0);
  22.     for (int i = 0; i < n; ++i) {
  23.       char h;
  24.       cin >> h;
  25.       if (h == 'D') {
  26.         pref1[i]++;
  27.       } else {
  28.         pref2[i]++;
  29.       }
  30.     }
  31.     for (int i = 1; i < n; ++i) {
  32.       pref1[i] += pref1[i - 1];
  33.       pref2[i] += pref2[i - 1];
  34.     }
  35.     map<pair<int, int>, int> a;
  36.     for (int i = 0; i < n; ++i) {
  37.       int d = pref1[i], k = pref2[i];
  38.       int maxi = 1;
  39.       if (d == 0) {
  40.         for (int j = 1; j * j <= k; ++j) {
  41.           if (k % j == 0) {
  42.             a[{0, j}]++;
  43.             maxi = max(maxi, a[{0, j}]);
  44.             if (j == k / j) {
  45.               continue;
  46.             }
  47.             a[{0, k / j}]++;
  48.             maxi = max(maxi, a[{0, k / j}]);
  49.           }
  50.         }
  51.       }
  52.       for (int j = 1; j * j <= d; ++j) {
  53.         int ind1 = -1, ind2 = -1;
  54.         if (d % j == 0 && k % j == 0) {
  55.           ind1 = d / j;
  56.           ind2 = k / j;
  57.           a[{d / j, k / j}]++;
  58.           maxi = max(maxi, a[{d / j, k / j}]);
  59.         }
  60.         if (d % j == 0 && k % (d / j) == 0 && (j != ind1 || k / (d / j) != ind2)) {
  61.           int h = d / j;
  62.           a[{j, k / h}]++;
  63.           maxi = max(maxi, a[{j, k / h}]);
  64.         }
  65.       }
  66.       cout << maxi << ' ';
  67.     }
  68.     cout << '\n';
  69.   }
  70.   return 0;
  71. }
  72.  
  73.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement