全WA,too long求助
查看原帖
全WA,too long求助
12755
星河·莫楼主2021/3/9 12:55
#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
struct data
{
	string st;
	int cnt[1000+5];
};
int t,m,t2,p,ans_gs,ans[1000+5];
string st2;
struct ha
{
	int n,ans;
	string st;
	
	vector<data> hash[167449+5];
	long long Change(string st)
	{
		int len=st.size();long long he=0,num=1;
		for (int i=0;i<len;i++)
		{
			num*=128;num%=167449;
			he+=num*int(st[i]);he%=167449;
		}
		return he;
	}
	int find_it(string st,int num)
	{
		int len=hash[num].size();
		for (int i=0;i<len;i++)
		if (hash[num][i].st==st) return i;
		return -1;
	}
	void add(string st,int i)
	{
		long long num=Change(st);
		int p=find_it(st,num);
		if (p==-1)
		{
			data a;
			a.st=st;
			for (int j=0;j<=t;j++)
			a.cnt[j]=0;
			a.cnt[i]=1;
			hash[num].push_back(a);
			
		}
		else
		{
			hash[num][p].cnt[i]=1;
		}
	}
	void ff_out()
	{
		for (int i=0;i<167449;i++)
		{
			int len=hash[i].size();
			for (int j=0;j<len;j++)
			{
				cout<<hash[i][j].st<<" "<<Change(hash[i][j].st)<<endl;
				for (int k=1;k<=t;k++)
				cout<<hash[i][j].cnt[k]<<" ";cout<<endl;	
			}
		}
		cout<<endl;
	}
}has;
int main()
{
	//freopen("a.out","w",stdout);
	cin>>t;
	for (int i=1;i<=t;i++)
	{
		cin>>m;
		for (int j=1;j<=m;j++)
		{
			cin>>st2;
			has.add(st2,i);
			//has.ff_out();
		}
	}
	cin>>t2;
	for (int i=1;i<=t2;i++)
	{
		cin>>st2;
		int num_now=has.Change(st2);
		p=has.find_it(st2,num_now);
		if (p==-1) 
		{
			cout<<endl;
			continue;
		}
		ans_gs=0;
		for (int j=1;j<=t2;j++)
		if (has.hash[num_now][p].cnt[j]==1)
		{
			ans_gs++;
			ans[ans_gs]=j;
		}
		
		for (int j=1;j<=ans_gs-1;j++)
		cout<<ans[j]<<" ";
		cout<<ans[ans_gs]<<endl;
	}
}
2021/3/9 12:55
加载中...