社区讨论

90pts字典树求调

B4388[语言月赛 202508] 共享航班参与者 2已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@mhjaz0ko
此快照首次捕获于
2025/11/03 23:36
4 个月前
此快照最后确认于
2025/11/03 23:36
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
const int N=110;
int n,m,ans;
map<string,int>mm;
struct Trie{
	int tr[N][150];
	int idx;
	int cnt[N];
	void insert(string s){
		int p=0;
		for(int i=7;i<s.size();i++){
			int u=s[i]-'0';
			if(tr[p][u]==0)tr[p][u]=++idx;
			p=tr[p][u];	 
		} 
		cnt[p]++;
		string x="";
		for(int i=0;i<=1;i++)x+=s[i];
		if(mm[x]==0){
			ans++;
		}
		else if(cnt[p]==1&&mm[x]!=0){
			ans++;
		}	
	} 
	void init(){
		for(int i=0;i<=idx;i++){
			for(int j=0;j<150;j++)tr[i][j]=0;
			cnt[i]=0;
		}
		idx=0;
	}
}t[N];
int main()
{
	//ios::sync_with_stdio(0);
	//cin.tie(0),cout.tie(0);
	cin>>n>>m;
	for(int i=1;i<=n;i++)t[i].init();
	for(int i=1;i<=m;i++){
		int x;
		cin>>x;
		for(int j=1;j<=x;j++){
			string s;
			cin>>s;
			mm[s]=i;
		}	
	}
	for(int i=1;i<=n;i++){
		string s,x="";
		int p;
		cin>>s;
		for(int j=0;j<=1;j++)x+=s[j];
		p=mm[x]; 
		t[p].insert(s);
	}
	cout<<ans;
	return 0;
}

回复

3 条回复,欢迎继续交流。

正在加载回复...