对询问建字典树,样例能过提交全 WA 求助
查看原帖
对询问建字典树,样例能过提交全 WA 求助
186472
AC_loveRealNewbie楼主2023/9/25 10:51
#include <bits/stdc++.h>
using namespace std;

const int N = 1e7 + 1e5;
int son[N][27];
int cnt[N];
int idx;
int n, m;
vector <int> ans[10100];
vector <string> s[1100];

void myinsert(string str, int id)
{
	int p = 0;
	for(int i = 0; str[i]; i = i + 1)
	{
		int u = str[i] - 'a';
		if(!son[p][u])
		{
			idx ++;
			son[p][u] = idx;
		}
		p = son[p][u];
	}
	cnt[p] = id;
}

void search(string str, int id)
{
	int p = 0;
	for(int i = 0; str[i]; i = i + 1)
	{
		int u = str[i] - 'a';
		if(!son[p][u])
			return;
		p = son[p][u];
	}
	if(cnt[p])
		ans[cnt[p]].push_back(id);
}

int main()
{
	cin >> n;
	for(int i = 1; i <= n; i = i + 1)
	{
		int k;
		cin >> k;
		for(int j = 1; j <= k; j = j + 1)
		{
			string str;
			cin >> str;
			s[i].push_back(str);
		}
	}
	cin >> m;
	for(int i = 1; i <= m; i = i + 1)
	{
		string str;
		cin >> str;
		myinsert(str, i);
	}
	for(int i = 1; i <= n; i = i + 1)
		for(int j = 0; j < s[i].size(); j = j + 1)
			search(s[i][j], i);
	bool f[1100] = {0};
	for(int i = 1; i <= m; i = i + 1)
	{
		memset(f, 0, sizeof(f));
		for(int j = 0; j < ans[i].size(); j = j + 1)
		{
			if(!f[ans[i][j]])
			{
				f[ans[i][j]] = 1;
				cout << ans[i][j] << " ";
			}
		}
		cout << "\n";
	}
	return 0;
}

有去重,样例能过

所有的 WA 的信息都是:Too short on line …

https://www.luogu.com.cn/record/126039769

2023/9/25 10:51
加载中...