P1381 单词背诵

点击查看代码
#include<bits/stdc++.h>
using namespace std;

const int N=1e3+10,M=1e5+10;
map<string,int> mp;
int a[M];
bool vis[N];
int cnt[N];
int n,m;

int main()
{
    ios::sync_with_stdio(0),cin.tie(0);
    cin>>n;

    for(int i=1;i<=n;i++){
        string s;cin>>s;
        mp[s]=i;
    }

    cin>>m;
    int k=0;
    for(int i=1;i<=m;i++){
        string s;
        cin>>s;
        if(mp.count(s)){
            a[i]=mp[s];
            if(!vis[mp[s]]){
                k++;
                vis[mp[s]]=true;
            }
        }
    }

    int now=0;
    int l=1,r=1;
    int ans=1e9;
    for(int r=1;r<=m;r++){
        if(a[r]==0) continue;
        if(cnt[a[r]]==0){
            now++;
        }
        cnt[a[r]]++;

        while(now==k){
            ans=min(ans,r-l+1);
            if(a[l]==0) l++;
            else if(cnt[a[l]]>1){
                cnt[a[l]]--;
                l++;
            }
            else{
                break;
            }
        }
    }

    if(k==0){
        cout<<k<<endl<<'0'<<endl;
        return 0;
    }
    cout<<k<<endl<<ans<<endl;

    return 0;
}


posted @ 2026-02-13 20:23  AnoSky  阅读(3)  评论(0)    收藏  举报