爆零求助
查看原帖
爆零求助
341122
lx503楼主2021/4/1 20:24
#include<bits/stdc++.h>
#define mod 100003
using namespace std;
int n;
char s[3001],t[3001];
long long ans;
vector<char*>a[mod];
int value(char* x,int len)
{
	int ans=0;
	//cout<<len<<endl;
	for(int i=0; i<=len; i++)
	{
		ans=(ans*27+x[i]-'a'+1)%mod;
	}
	return ans;
}
bool mfind(char* x,int y)
{
//	bool ok=0;
	for(int i=0; i<a[y].size(); i++)
	{
		if(x==a[y][i])
		{
			return 1;
		}
	}
	return 0;
}
int main()
{
	//freopen("block.in","r",stdin);
	//freopen("block.out","w",stdout);
	scanf("%d%s%s",&n,&s,&t);
	//枚举bob
	for(int i=0; i<n; i++) //左边丢i个
	{
		for(int j=0; j<n-i; j++) //右边丢j个
		{
			int len=j-i+1;
			char now[3001];
			int nowlen=-1;
			for(int k=i; k<n-j; k++)
			{
				now[++nowlen]=t[k];
			}
			/*	for(int k=0;k<=nowlen;k++)
				{
					cout<<now[k];
				}*/
			//cout<<endl;
			int kk=value(now,nowlen);
			if(mfind(now,kk))
			{
				continue;
			}

			a[kk].push_back(now);
			//find
			int l=-1;
			bool bigok=1;
			for(int k=0; k<=nowlen; k++)
			{
				bool ok=0;
				while(l<n)
				{
					l++;
					if(s[l]==now[k])
					{
						ok=1;
						break;
					}
				}
				if(!ok)
				{
					bigok=0;
					break;
				}
			}
			if(bigok)
			{
				//	printf("bigok: i:%d j:%d\n",i,j);
				ans++;
			}

		}
	}
	printf("%lld",ans);
	return 0;
}
2021/4/1 20:24
加载中...