1 条题解

  • 0
    @ 2022-10-13 10:02:42

    枚举 s[i] 的拆分方案,检查把 s[i] 拆成 LR 之后, LR 是否出现过。如果暴力枚举的话,Σn105\Sigma n \le 10^5 会超时。可以使用二分查找或者直接使用时间复杂度为 O(logN)O(\log N)map

    map 文档:http://wiki.33dai.cn/lang/csl/associative-container/#map

    #include <bits/stdc++.h>
    using namespace std;
    int t;
    int n;
    map<string, int> m;
    string s[112345];
    int main()
    {
        cin >> t;
        while (t--)
        {
            cin >> n;
            m.clear();
            for (int i = 1; i <= n; i++)
            {
                cin >> s[i];
                m[s[i]]++;
            }
            for (int i = 1; i <= n; i++)
            {
                bool flag = false; //一开始认为找不到
                //枚举s[i]的分界点,L:0~k-1、R:k~len-1
                for (int k = 1; k < s[i].length(); k++)
                {
                    string L = "";
                    string R = "";
                    for (int li = 0; li < k; li++)
                        L += s[i][li];
                    for (int ri = k; ri < s[i].length(); ri++)
                        R += s[i][ri];
                    if (m[L] > 0 && m[R] > 0)
                    {
                        flag = true;
                        break;
                    }
                }
                if (flag)
                    cout << "1";
                else
                    cout << "0";
            }
            cout << "\n";
        }
        return 0;
    }
    
    • 1

    信息

    ID
    1099
    时间
    2000ms
    内存
    256MiB
    难度
    9
    标签
    递交数
    14
    已通过
    3
    上传者