HDU 5455.Fang Fang【2015 ACM/ICPC Asia Regional Shenyang Online】【字符串处理】9月19

Fang Fang

Problem Description
Fang Fang says she wants to be remembered.
I promise her. We define the sequence  F  of strings.
F0 = f",
F1 = ff",
F2 = cff",
Fn = Fn1 + f", for n > 2
Write down a serenade as a lowercase string  S  in a circle, in a loop that never ends.
Spell the serenade using the minimum number of strings in  F , or nothing could be done but put her away in cold wilderness.
 

Input
An positive integer  T , indicating there are  T  test cases.
Following are  T  lines, each line contains an string  S  as introduced above.
The total length of strings for all test cases would not be larger than  106 .
 

Output
The output contains exactly  T  lines.
For each test case, if one can not spell the serenade by using the strings in  F , output  1 . Otherwise, output the minimum number of strings in  F  to split  S  according to aforementioned rules. Repetitive strings should be counted repeatedly.
 

Sample Input
   
   
   
   
8 ffcfffcffcff cffcfff cffcff cffcf ffffcffcfff cffcfffcffffcfffff cff cffc
 

Sample Output
   
   
   
   
Case #1: 3 Case #2: 2 Case #3: 2 Case #4: -1 Case #5: 2 Case #6: 4 Case #7: 1 Case #8: -1
Hint
Shift the string in the first test case, we will get the string "cffffcfffcff" and it can be split into "cffff", "cfff" and "cff".
 
具体看代码:
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int main(){
    int T;
    scanf("%d",&T);
    getchar();
    for(int p=1;p<=T;p++){
        char s[1000005];
        scanf("%s",s);
        int l=strlen(s),cnt=0;
        bool key=true,uc=false;//uc记录字符串里是否含有c,key记录字符串是否合法(含有非c,f的字符)
        for(int i=0;i<l;i++){
            if(s[i]=='c'){
                uc=true;
                if(s[(i+1)%l]=='f'&&s[(i+2)%l]=='f')
                    cnt++;
                else{//不合法
                    key=false;
                    break;
                }
            }
            else if(s[i]!='f'){//不合法
                key=false;
                break;
            }
        }
        if(key){
            if(uc) printf("Case #%d: %d\n",p,cnt);//含有c
            else printf("Case #%d: %d\n",p,(l+1)/2);//不含有c
        }
        else printf("Case #%d: -1\n",p);//不合法
    }
    return 0;
}



你可能感兴趣的:(C++,ACM,字符串处理,HDU)