1 条题解

  • 0
    @ 2025-4-16 12:59:04
    #include <bits/stdc++.h>
    #define ull unsigned long long
    using namespace std;
    int n;
    int len[10];
    string s[10];
    ull BASE = 173;
    ull bPow[2005];
    ull hsh[10][2005];
    set<ull> se[10];
    bool check(int L)
    {
        for (int i = 1; i <= n; i++)
            se[i].clear();
        for (int i = 1; i <= n - 1; i++)
        {
            for (int j = 1; j + L - 1 <= len[i]; j++)
            {
                ull nowHash = hsh[i][j + L - 1] - hsh[i][j - 1] * bPow[L];
                se[i].insert(nowHash);
            }
        }
        for (int j = 1; j + L - 1 <= len[n]; j++)
        {
            ull nowHash = hsh[n][j + L - 1] - hsh[n][j - 1] * bPow[L];
            bool flag = true;
            for (int k = 1; k <= n - 1; k++)
            {
                if (se[k].find(nowHash) == se[k].end())
                {
                    flag = false;
                    break;
                }
            }
            if (flag)
                return true;
        }
        return false;
    }
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        cin >> n;
        for (int i = 1; i <= n; i++)
        {
            cin >> s[i];
            len[i] = s[i].size();
            s[i] = "^" + s[i] + "$";
        }
        // build Hash
        bPow[0] = 1;
        for (int i = 1; i <= 2000; i++)
            bPow[i] = bPow[i - 1] * BASE;
        for (int i = 1; i <= n; i++)
            for (int j = 1; j <= len[i]; j++)
                hsh[i][j] = hsh[i][j - 1] * BASE + (s[i][j] - 'a' + 1);
        // bs
        int l = 0;
        int r = len[1];
        int ans = 0;
        while (l <= r)
        {
            int mid = (l + r) / 2;
            if (check(mid))
            {
                ans = mid;
                l = mid + 1;
            }
            else
            {
                r = mid - 1;
            }
        }
        cout << ans << endl;
        return 0;
    }
    

    信息

    ID
    1360
    时间
    1000ms
    内存
    512MiB
    难度
    4
    标签
    递交数
    10
    已通过
    4
    上传者