# | Author | Problem | Lang | Verdict | Time | Memory | Sent | Judged | |
---|---|---|---|---|---|---|---|---|---|
118651067 |
Contestant: AJAYHAYAGREEVE |
1536C - 23 | GNU C++14 | Wrong answer on pretest 2 | 842 ms | 89036 KB | 2021-06-06 19:31:47 | 2021-06-06 19:31:47 |
#include<bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/trie_policy.hpp> #define pb push_back //#define mp make_pair #define fastread ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); #define openfile ifstream cin; ofstream cout; cin.open("input.txt"); cout.open("output.txt"); #define f(i, x, y) for(int i = x; i < y; i++) #define all(X) X.begin(), X.end() #define int long long #define ll unsigned long long #define key pair<int, int> #define keyy pair<pair<int, int>, int> #define keyyy pair<pair<int, int>, pair<int, int>> // #define ordered_set<T> tree<T, null_type, less<T>, rb_tree_tag,tree_order_statistics_node_update> #define keyd pair<double, double> #define ff first #define ss second #define double long double // const int mod = 1e9 + 7; const int mod = 998244353; // const int mod = 360 * 12 * (double)1e10; const int inf = 1e18; const int infi = 2e9; using namespace std; using namespace __gnu_pbds; const int size = 5e5 + 10; vector<int> di[size]; main() { f(i, 1, size) for(int j = i; j < size; j += i) di[j].pb(i); fastread; int T; cin>>T; while(T--) { int n; cin>>n; string s; cin>>s; s.insert(0, " "); map<key, int> m[n+1]; map<key, int> pos; key cnt[n+1]; int x = 0, y = 0; f(i, 1, s.length()) { if(s[i] == 'D') x++; else y++; cnt[i] = {x, y}; int g = __gcd(x, y); m[i][{x/g, y/g}] = 1; for(int j : di[x]) { if(((y * j) % x) != 0) continue; int k = y * j / x; int g = __gcd(j, k); key tt = {j/g, k/g}; if(pos.find(tt) == pos.end()) continue; int idx = pos[tt]; int t1 = x - cnt[idx].ff, t2 = y - cnt[idx].ss; if(((j != 0) && (t1 % j != 0)) || ((k != 0) && (t2 % k != 0))) continue; // cout<<j<<" "<<k<<" "<<idx<<" "<<g<<" "<<(m[idx].find(tt) != m[idx].end())<<"\n"; m[i][tt] = max(m[i][tt], m[idx][tt] + 1); } int ans = 0; for(keyy k : m[i]) { ans = max(ans, k.ss); pos[k.ff] = i; // cout<<k.ff.ff<<" "<<k.ff.ss<<" "<<k.ss<<"\n"; } // cout<<"d "<<x<<" "<<y<<" "<<ans<<"\n"; cout<<ans<<" "; //cout<<"\n"; } cout<<"\n"; } }