社区讨论

50分求调qwq

P1381单词背诵参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@lxn00dix
此快照首次捕获于
2024/06/20 16:26
2 年前
此快照最后确认于
2024/06/20 20:20
2 年前
查看原帖
CPP
#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;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...