原题地址
题解:
问一个字符串最少能出现几个图上出来的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;
}