版权声明:本文为博主原创文章,转载请注明出处( • ̀ω•́ )✧ https://blog.csdn.net/wangws_sb/article/details/83012810
题目:输入一个字符串,问最少能由几个Fi组成,若不能恰好由Fi组成,输出-1;
这题有一个坑点就是如果输入的字符串中有除c和f以外的其他字符时直接输出-1(刚开始做的时候没有想到这一点,被坑的好惨= =);如果字符串全部由f组成,则输出(len+1)/2;否则就要看字符串中c的个数,若相邻两个c之间的f少于2个输出-1,否则c的个数就是Fi的最少数目。还有一点要注意的就是这个字符串是环状的。
AC代码:
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <queue>
#include <stack>
#include <vector>
#include <map>
#include <set>
using namespace std;
const int MAX=1e6+7;
int t;
string s;
int main()
{
scanf("%d",&t);
for(int o=1;o<=t;o++)
{
int ok=1;
int flag=0;
int cf=0;
int ans=0;
cin>>s;
int len=s.size();
for(int i=0; i<len; i++)
{
if(s[i]=='c')
{
if(s[(i+1)%len]=='c'||s[(i+2)%len]=='c')
{
ok=0;
break;
}
ans++;
flag=1;
cf=0;
}
if(s[i]!='c'&&s[i]!='f')
{
ok=0;
break;
}
}
if(ok==0)
printf("Case #%d: -1\n",o);
else
{
if(ans==0)
ans=(len+1)/2;
printf("Case #%d: %d\n",o,ans);
}
}
return 0;
}