|
|
|
@ -1,30 +1,65 @@
|
|
|
|
|
#include <bits/stdc++.h>
|
|
|
|
|
using namespace std;
|
|
|
|
|
int res; // 一共处理几次
|
|
|
|
|
// 是不是全是字符零
|
|
|
|
|
bool isAllZero(string s) {
|
|
|
|
|
for (int i = 0; i < s.size(); i++)
|
|
|
|
|
if (s[i] != '0') return false;
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
测试用例:
|
|
|
|
|
5
|
|
|
|
|
12321
|
|
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
int cnt = 1;
|
|
|
|
|
// 结构体
|
|
|
|
|
struct Node {
|
|
|
|
|
int c;
|
|
|
|
|
int count;
|
|
|
|
|
int st, ed;
|
|
|
|
|
bool const operator<(const &Node t) {
|
|
|
|
|
if (count != t.count) return count > t.count;
|
|
|
|
|
if (st < t.st && ed > t.ed) return false;
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 递归写法
|
|
|
|
|
void dfs(string s) {
|
|
|
|
|
int p;
|
|
|
|
|
for (p = s.size() - 1; p >= 1; p--)
|
|
|
|
|
if (s[0] != s[p]) break;
|
|
|
|
|
int p1[10], p2[10];
|
|
|
|
|
|
|
|
|
|
string t;
|
|
|
|
|
for (int i = 1; i <= p; i++) t += s[i];
|
|
|
|
|
if (t.size()) cnt++, dfs(t);
|
|
|
|
|
}
|
|
|
|
|
vector<Node> a;
|
|
|
|
|
|
|
|
|
|
int main() {
|
|
|
|
|
int n;
|
|
|
|
|
string s;
|
|
|
|
|
int n; // n个长度的字符串
|
|
|
|
|
string s; // 字符串
|
|
|
|
|
cin >> n >> s;
|
|
|
|
|
dfs(s);
|
|
|
|
|
cout << cnt << endl;
|
|
|
|
|
|
|
|
|
|
// 多次循环,判断是不是已经全是'0'的字符串,如果不是,则继续处理
|
|
|
|
|
while (!isAllZero(s)) {
|
|
|
|
|
// 记录有多少个非0数字,都是多少个
|
|
|
|
|
memset(b, 0, sizeof b);
|
|
|
|
|
memset(p1, -1, sizeof p1);
|
|
|
|
|
memset(p2, -1, sizeof p2);
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < s.size(); i++) {
|
|
|
|
|
if (s[i] != '0') {
|
|
|
|
|
b[s[i] - '0']++;
|
|
|
|
|
if (p1[s[i] - '0'] == -1)
|
|
|
|
|
p1[s[i] - '0'] = i; // 记录起点
|
|
|
|
|
else
|
|
|
|
|
p2[s[i] - '0'] = i; // 记录终点
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 整理一下
|
|
|
|
|
vector<Node> q;
|
|
|
|
|
for (int i = 1; i <= 9; i++)
|
|
|
|
|
if (b[i]) q.push_back({i, b[i], p1[i], p2[i] == -1 ? p1[i] : p2[i]}); // 几个在前,是啥数字在后
|
|
|
|
|
sort(q.begin(), q.end());
|
|
|
|
|
|
|
|
|
|
// 最多的数字是num,个数=count,这个是最牛X的
|
|
|
|
|
int num = q[0].second;
|
|
|
|
|
// 找出这个数字的起止位置
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < q.size(); i++)
|
|
|
|
|
if ((int)s[i] == num) s[i] = '0';
|
|
|
|
|
}
|
|
|
|
|
// 输出一共处理了几次
|
|
|
|
|
cout << res << endl;
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|