P2580 于是他错误的点名开始了

题目链接:

方法一、\(\rm Trie\)

#include <bits/stdc++.h>

using namespace std;

const int N = 5e5 + 10;

int ch[N][26], idx, cnt[N];

void insert(string s) {
	int p = 0;
	for (int i = 0; i < s.size(); i++) {
		int j = s[i] - 'a';
		if (!ch[p][j]) ch[p][j] = ++idx;
		p = ch[p][j];
	}
	cnt[p] ++;
}

int query(string s) {
	int p = 0;
	for (int i = 0; i < s.size(); i++) {
		int j = s[i] - 'a';	
		if (!ch[p][j]) return 0;
		p = ch[p][j];
	}
	return cnt[p];
}

int main()
{
	ios::sync_with_stdio(false), cin.tie(nullptr);
	int n, m;
	cin >> n;
	for (int i = 0; i < n; i++) {
		string s;
		cin >> s;
		insert(s);
	}
	cin >> m;
	map<string, int> p;
	vector<string> v;
	for (int i = 0; i < m; i++) {
		string s;
		cin >> s;
	    p[s] = 0;
	    v.push_back(s);
	}
	for (auto i : v) {
		int t = query(i);
		if (!t) cout << "WRONG\n";
		else if (t == 1 && p[i] == 0) {
			cout << "OK\n";
			p[i] = 1;
		}
		else cout << "REPEAT\n";
	}
	return 0;
}
posted @ 2024-04-23 20:34  胖柚の工作室  阅读(22)  评论(0)    收藏  举报