代码30分求调
查看原帖
代码30分求调
516836
Carey_chen楼主2023/10/29 22:15
#include <bits/stdc++.h>

using namespace std;

string a[1010], __a[1010], b[100010];
map<string, int> bkt;
int __n, n = 0, m;

bool check()
{
    for (int i = 1; i <= n; i++)
    {
        if (bkt[a[i]] == 0)
        {
            return false;
        }
    }

    return true;
}

void checkai()
{
    for (int i = 1; i <= __n; i++)
    {
        bool flag = false;

        for (int j = 1; j <= m; j++)
        {
            if (__a[i] == b[j])
            {
                flag = true;
                break;
            }
        }

        if (flag == true)
        {
            n++;
            a[n] = __a[i];
        }
    }
}

int main()
{
    scanf("%d", &__n);

    for (int i = 1; i <= __n; i++)
    {
        cin >> __a[i];
    }

    scanf("%d", &m);

    for (int i = 1; i <= m; i++)
    {
        cin >> b[i];
    }

    checkai();

    int j = 0, ans = 1e9;
    for (int i = 1; i <= m; i++)
    {
        bkt[b[i]]++;

        if (check())
        {
            ans = min(ans, i);
            j = i;
            break;
        }
    }

    for (int i = 2; i <= n; i++)
    {
        bkt[b[i - 1]]--;

        if (bkt[b[i - 1]] == 0)
        {
            while (j + 1 <= m && b[j] != b[i - 1])
            {
                bkt[b[j]]++;
                j++;
            }
            bkt[b[j]]++;
        }

        ans = min(ans, j - i + 1);
    }

    printf("%d\n%d", n, ans);

    return 0;
}

rt

2023/10/29 22:15
加载中...