天天看点

【找规律+vector】HDU-5455 Fang Fang注解代码结果

【找规律+vector】HDU-5455 Fang Fang注解代码结果
【找规律+vector】HDU-5455 Fang Fang注解代码结果

注解

1、如果有除了c和f之外的字母,一定是不合法的。

2、如果没有c,只有f,答案就是(len(s)+1)/2

3、如果有c也有f,就需要找到并记录每个c的位置。

4、如果相邻的两个c(首尾相邻也算)差距小于等于2,也是不合法的。

5、满足了以上的所有条件,那么就是合法的,并且输出的值就是c的个数。

代码

#include <iostream>
#include <vector>

using namespace std;

int main() {

    int n;
    cin>>n;

    string s;
    getline(cin, s);

    for(int i=1; i<=n; i++) {
        getline(cin, s);
        int len = s.length();
        int flag = 1;
        int ans = 0;
        vector<int> posC;
        for(int j=0; j<len; j++) {
            if(s.at(j)!='c' && s.at(j)!='f') {
                flag = 0;
                break;
            }
            if(s.at(j)=='c') {
                posC.push_back(j);
            }
        }
        if(flag && posC.size()) {
            ans = posC.size();
            for(int j=0; j<posC.size()-1; j++) {
                int dis = posC[j+1] - posC[j];
                if(dis<=2) {
                    flag = 0;
                    break;
                }
            }
            if(posC[0]+len-posC[posC.size()-1]<=2) {
                flag = 0;
            }
        } else if(flag) {
            ans = (s.length()+1)/2;
        }

        cout<<"Case #"<<i<<": ";
        if(flag) {
            cout<<ans<<endl;
        } else {
            cout<<"-1"<<endl;
        }

    }

    return 0;
}
           

结果

【找规律+vector】HDU-5455 Fang Fang注解代码结果