链接:
https://codeforces.com/problemset/problem/1536/C
题意:
给一个长度为n的dk串,问按dk的比例分字符串,每一个长度都能最多分几个字符串。
本题要用到,在一个dk比例的字符串后,加上一个相同比例的dk串,总的比例不变,这样我们就可以直接遍历计算每一个长度能分到的字符串。
代码如下:
#include<iostream>
#include<vector>
#include<cmath>
#include<set>
#include<map>
#include<algorithm>
#include<string>
#include<string.h>
#include<random>
#include<queue>
using namespace std;
typedef long long ll;
int gcd(int a, int b) {return b ? gcd(b, a % b) : a;
}
int main() {int T;cin >> T;while (T--) {int n;cin >> n;string s;cin >> s;int d = 0, k = 0;map<pair<int, int>, int>mp;for (int i = 0; i < n; i++) {if (s[i] == 'D') {d++;}else {k++;}int g = gcd(d, k);mp[{d / g, k / g}]++;cout << mp[{d / g, k / g}] << " ";}cout << endl;}return 0;
}