Fang Fang says she wants to be remembered.
I promise her. We define the sequence F of strings.
F0 = ‘‘f",
F1 = ‘‘ff",
F2 = ‘‘cff",
Fn = Fn−1 + ‘‘f", for n > 2
Write down a serenade as a lowercase string S in a circle, in a loop that never ends.
Spell the serenade using the minimum number of strings in F
, or nothing could be done but put her away in cold wilderness.
Input
An positive integer T
, indicating there are T test cases.
Following are T lines, each line contains an string S as introduced above.
The total length of strings for all test cases would not be larger than 106
.
Output
The output contains exactly T
lines.
For each test case, if one can not spell the serenade by using the strings in F, output −1. Otherwise, output the minimum number of strings in F to split S
according to aforementioned rules. Repetitive strings should be counted repeatedly.
Sample Input
8 ffcfffcffcff cffcfff cffcff cffcf ffffcffcfff cffcfffcffffcfffff cff cffc
Sample Output
Case #1: 3 Case #2: 2 Case #3: 2 Case #4: -1 Case #5: 2 Case #6: 4 Case #7: 1 Case #8: -1
Hint
Shift the string in the first test case, we will get the string "cffffcfffcff" and it can be split into "cffff", "cfff" and "cff". 分析:找到c之后判断是不是后面跟着两个f就可以了,如果没有c那么输出/2%2后的结果就可以了
#include<iostream>
#include<cstring>
using namespace std;
char a[1000005];
int main()
{
int t;
int count = 0;
scanf("%d",&t);
getchar();
while(t--)
{
count++;
scanf("%s",a);
int len = strlen(a);
int flag = 0;
int sum = 0;
for(int i = 0; i < len; i ++)
{
if(a[i]!='c'&&a[i]!='f')
{
flag = 1;
break;
}
else if(a[i]=='c')
{
sum++;
int k = 0;
for(int j = i+1; ; j ++)
{
int l;
if(j>len-1)//判断最后一个符号
l = j-len;
else
l = j;
k++;
if(a[l]=='c')
{
flag = 1;
break;
}
if(k==2)
break;
}
}
}
printf("Case #%d: ",count);
if(flag)
printf("-1\n");
else if(!sum)
printf("%d\n",len/2+len%2);
else
printf("%d\n",sum);
}
}