题意:给出一个字符串,问最少能用几个Fn表示,输出最小数目,若不能则输出-1。
坑点:输入的字符串中可以含除‘c’和‘f’外的其他字符
思路:
先将前面的f记录,从第一个c开始处理,看跟在后面的f的数目是否大于等于2,最前面的f加在最后的c上。若果大于2则temp++,否则无法组成输出-1.
#include <bits/stdc++.h>
#define ll long long
using namespace std;
char s[1000010];
int main()
{
int t;
scanf("%d",&t);
for(int k=1;k<=t;k++)
{
scanf("%s",s);
printf("Case #%d: ",k);
int l=strlen(s),flag=1,fq=0;
for(int i=0;i<l;i++)
{
if(s[i]!='f'&&s[i]!='c')
{
printf("-1\n");
flag=0;
break;
}
}
if(!flag)
continue;
int i;
for(i=0;i<l;i++)
if(s[i]=='c')
break;
else
fq++;
if(i>=l){
printf("%d\n",fq/2+fq%2);
continue;
}
int temp=0;
for(int j=i;j<l;)
{
int f=j+1;
while(s[f]!='c'&&f<l)
f++;
int num=f-j-1;
if(f>=l)
num+=fq;
if(num<2)
{
temp=-1;
break;
}
temp++;
j=f;
}
printf("%d\n",temp);
}
}