1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include <math.h>
5
6 char str[100001];
7 ///注意在ans+=f[g]*f[g];中,ans是long long,所以运算的两个数至少有一个数是long long,所以f数组选择的类型是长整形
8 long long f[100001];
9
10 int main()
11 {
12 long n,g,pre,len,i,j;
13 long long ans,t,s;
14 scanf("%ld",&n);
15 for (j=1;j<=n;j++)
16 {
17 g=0;
18 pre=-1;
19 ans=0;
20 scanf("%s",str);
21 len=strlen(str);
22 for (i=0;i<len;i++)
23 if (str[i]!=str[i+1])
24 {
25 g++;
26 f[g]=i-pre;
27 ans+=f[g]*f[g];
28 pre=i;
29 }
30 if (g==1)
31 printf("Case #%ld: %lld\n",j,ans);
32 else
33 {
34 t=0;
35 for (i=1;i<g;i++)
36 {
37 //(f[x]+1)*(f[x]+1)+(f[y]-1)*(f[y]-1)-f[x]*f[x]-f[y]*f[y]=2*f[x]-2*f[y]+2
38 s=abs(f[i]-f[i+1]);
39 if (s>t)
40 t=s;
41 }
42 t=t*2+2;
43 for (i=2;i<g;i++)
44 if (f[i]==1)
45 {
46 s=(f[i-1]+1+f[i+1])*(f[i-1]+1+f[i+1])-f[i-1]*f[i-1]-1-f[i+1]*f[i+1];
47 if (s>t)
48 t=s;
49 }
50 printf("Case #%ld: %lld\n",j,ans+t);
51 }
52 }
53 return 0;
54 }