Fang Fang says she wants to be remembered.
I promise her. We define the sequence F F of strings.
F 0 = ‘‘f", F0 = ‘‘f",
F 1 = ‘‘ff", F1 = ‘‘ff",
F 2 = ‘‘cff", F2 = ‘‘cff",
F n = F n−1 + ‘‘f", for n > 2 Fn = Fn−1 + ‘‘f", for n > 2
Write down a serenade as a lowercase string S S in a circle, in a loop that never ends.
Spell the serenade using the minimum number of strings in F F, or nothing could be done but put her away in cold wilderness.
I promise her. We define the sequence F F of strings.
F 0 = ‘‘f", F0 = ‘‘f",
F 1 = ‘‘ff", F1 = ‘‘ff",
F 2 = ‘‘cff", F2 = ‘‘cff",
F n = F n−1 + ‘‘f", for n > 2 Fn = Fn−1 + ‘‘f", for n > 2
Write down a serenade as a lowercase string S S in a circle, in a loop that never ends.
Spell the serenade using the minimum number of strings in F F, or nothing could be done but put her away in cold wilderness.
Following are T T lines, each line contains an string S S as introduced above.
The total length of strings for all test cases would not be larger than 10 6 106.
For each test case, if one can not spell the serenade by using the strings in F F, output −1 −1. Otherwise, output the minimum number of strings in F F to split S S according to aforementioned rules. Repetitive strings should be counted repeatedly.
8 ffcfffcffcff cffcfff cffcff cffcf ffffcffcfff cffcfffcffffcfffff cff cffc
Case #1: 3
Case #2: 2
Case #3: 2
Case #4: -1
Case #5: 2
Case #6: 4
Case #7: 1
Case #8: -1
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的个数,然后就是考虑不可能的情况
1.存在c但他后边的两个字符不是ff(还要注意是循环串)
2.存在除c和f之外的其他元素(最大的坑点)
如果字符串全是f的话就按照奇偶计算最小数就好了
ac代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
char a[1000005];
int main()
{
int t;
cin>>t;
int p=0;
getchar();
while(t--)
{
p++;
gets(a);
int len=strlen(a);
int sum=0;
int flag=0;
for(int i=0; i<len; i++)
{
if(a[i]!='c'&&a[i]!='f')
flag=1;
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;
}
}
if(flag==1)
break;
}
if(sum==0)
{
if(len%2==0)
sum=len/2;
else
sum=len/2+1;
}
printf("Case #%d: ",p);
if(flag==1)
printf("-1\n");
else
printf("%d\n",sum);
}
return 0;
}