23分求助! 调了很多天! 救救孩子吧 !
查看原帖
23分求助! 调了很多天! 救救孩子吧 !
386831
nneztrw楼主2021/10/11 20:44

RT 23分 trie树 调了非常多天还是23分

评测结果

代码:

#include<bits/stdc++.h>
#define N 50005
#define int long long
using namespace std;
inline int read()
{
	int x=0; char ch=getchar();
	while(ch<'0'||ch>'9') ch=getchar();
	while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
	return x;
}

int m,n,cnt,maxd;
int a[N][2],pass[N],ed[N];
int f[N/5];

inline void ins(int l)
{
	int p=0;
	for(int i=1;i<=l;++i)
	{
		int x=f[i];
		if(!a[p][x]){
			a[p][x]=++cnt;
			p=cnt;
		}
		else p=a[p][x];
		pass[p]++;
	}
	ed[p]++;
}

inline int ser(int l)
{
	int p=0,ans=0;
	int i=1;
	for(;i<=l;++i)
	{
		bool x=f[i];
		if(!a[p][x]) return ans;
		p=a[p][x];
		ans+=ed[p];
	}
	return ans+pass[p]-ed[p];
}

int main()
{
	m=read(),n=read();
	while(m--)
	{
		int x=read();	
		for(int i=1;i<=x;++i) f[i]=read();
		ins(x);
	}
	while(n--)
	{
		int x=read();
		for(int i=1;i<=x;++i) f[i]=read();
		printf("%d\n",ser(x));	
	}	
	return 0;
}
2021/10/11 20:44
加载中...