50分求调qwq
查看原帖
50分求调qwq
632459
Vamppit楼主2024/6/20 16:25
#include<bits/stdc++.h>
using namespace std;
const  long long maxn=1000005,mod=1000541;
 long long n,m,ans,tot,mark,l=1,r=0,b[maxn];
char ch[20];
short a[10000005],vis[10000005];
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>ch; ans=0;
		int len=strlen(ch);
		for(int j=0;j<len;j++)
		{
			ans+=(ans*233+( long long)ch[j])%mod;
		}
		b[i]=ans;
		a[ans]=1;
	}
	cin>>m;
	for(int i=1;i<=m;i++)
	{
		cin>>ch; ans=0;
		int len=strlen(ch);
		for(int j=0;j<len;j++)
		{
			ans+=(ans*233+( long long)ch[j])%mod;
		}
		if(a[ans]==1)
		{
			a[ans]=-1;
			tot++;
			b[i]=ans;
		}
		else if(a[ans]==-1)
			b[i]=ans;
	}
	cout<<tot<<endl;
	if(tot==0)
	{
		cout<<0;
		return 0;
	}
	ans=mod+1;
	while(1)
	{
		if(tot)
		{
			r++;
			if(r>m)	break;
			if(b[r]!=0)
			{
				if(vis[b[r]]==0) tot--;
				vis[b[r]]++;
			}
		}
		else
		{
			while(b[l]==0)	l++;
			if(l>m)	break;
			ans=min(ans,r-l+1);
			if(vis[b[l]]==1)
				tot++;
			if(vis[b[l]]>=1)
			{
				vis[b[l]]--,l++;
			}
		}
	}
	cout<<ans;
	return 0;
}
2024/6/20 16:25
加载中...