JOI 2012-2013 問3 Signboard

int main()
{
    int res = 0;
    int n;
    string s, a;
    cin >> n >> s;

    for(int i = 0; i < n; i++)
    {
        cin >> a;

        bool f = false;

        for(int j = 0; (j < a.size()) && !f; j++)
            //始点を決める
            if(a[j] == s[0])
                // 間隔を決める
                for(int k = 1; (k < a.size()) && !f; k++)
                {
                    int current = j + k;
                    for(int l = 1; l < s.size() && current < a.size(); l++)
                    {
                        if(a[current] != s[l])
                            break;

                        if(l == s.size() - 1)
                            f = true;

                        current += k;
                    }
                }

        if(f)
            res++;
    }

    cout << res << endl;
}