You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

47 lines
1.5 KiB
C++

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e5 + 50;
char a[N];
vector<int> v;
inline ll square(ll x) { return x * x; }
int main()
{
int T;
scanf("%d", &T);
for (int t = 1; t <= T; t++)
{
v.clear();
scanf("%s", a);
int n = strlen(a);
int curLen = 1;
for (int i = 1; i < n; i++)
{
if (a[i - 1] == a[i])
curLen++;
else
v.push_back(curLen), curLen = 1;
}
v.push_back(curLen);
/*for (int i : v)
cout << i << " ";
cout << endl;*/
ll ans_base = accumulate(v.begin(), v.end(), 0ll, [](ll pr, ll x) {
return pr + x * x;
});
ll ans = ans_base;
if (v[0] == 1)
ans = max(ans, ans_base - 1 - square(v[1]) + square(1 + v[1]));
if (v[v.size() - 1] == 1)
ans = max(ans, ans_base - 1 - square(v[v.size() - 2]) + square(1 + v[v.size() - 2]));
for (int i = 1; i < v.size() - 1; i++)
if (v[i] == 1)
ans = max(ans, ans_base - 1 - square(v[i - 1]) - square(v[i + 1]) + square(v[i - 1] + 1 + v[i + 1]));
for (int i = 1; i < v.size(); i++)
ans = max(ans, ans_base - square(v[i - 1]) - square(v[i]) + square(v[i - 1] + 1) + square(v[i] - 1));
for (int i = 1; i < v.size(); i++)
ans = max(ans, ans_base - square(v[i - 1]) - square(v[i]) + square(v[i - 1] - 1) + square(v[i] + 1));
printf("Case #%d: %lld\n", t, ans);
}
return 0;
}