原题地址
题解:
问一个字符串最少能出现几个图上出来的F。
第一个坑:可能不是C和 F。
第二个坑:没有C,只有F
第三个坑:这个字符串是一个环。
附上代码:

#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
#include <string>
#include <iomanip>
#include <string>
#include <sstream>
#include  <list>
//#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
/*
int cmp(shi a,shi b)
{
    return a.x<b.x;
}
long long cmd(long long a, long long  b)
{
    return a > b;
}*/

struct shi{
    long long one = -INF;
    long long  two = -INF;
    long long place;
};
int main()
{
    long long t;
    scanf("%lld",&t);
    for(long long i=1;i<=t;i++)
    {
        string s;
        cin >>s;
        int len = s.length();
        int flag=1;
        cout<<"Case #"<<i<<": ";
        for(int j=0;j<len;j++){//判断是否有不是c,f的字符
            if(s[j]!='c'&&s[j]!='f')
            {
                flag=0;
                break;
            }
        }
        if(!flag)
        {
            cout<<-1<<endl;
            continue;
        }
        int j;
        for(j=0;j<len;j++){//找c
            if(s[j]=='c'){
                break;
            }
        }
        int f ,sum=0,k;
        if(j>=len)//没有c,都是F,那么就要用最多的f来输出
        {
            cout<<(len+1)/2<<endl;
        }
        else{//有c
            f= j;
            for(int l=j;l<len;){
                for( k=l+1;k<len;k++){
                    if(s[k]=='c')
                       break;

                    }
                int num = k-l-1;
                if(k>=len){
                    num+=f;
                    }
                if(num<2){
                    cout<<-1<<endl;
                    flag=0;
                    break;
                    }
                sum++;
                l=k;
                }
            if(flag)
                {
               cout<<sum<<endl;
                }

            }
        //cout<<sum<<endl;
    }

    return 0;

}