求援必关
  • 板块CF898C Phone Numbers
  • 楼主fede
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/7/12 19:50
  • 上次更新2024/7/12 21:05:55
查看原帖
求援必关
782458
fede楼主2024/7/12 19:50

求救!求救!

为什么RERE呢?

#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
const int N=1e6+10;
struct Trie{
	struct Node{
		bool isword;
		int cnt=0;
		int p[15];
	};
	int num=0;
	bool flag=0;
	Node a[N];
	void init(){
		for(int i=0;i<=num;i++){
			a[i].cnt=0;
			a[i].isword=0;
			memset(a[i].p,0,sizeof(a[i].p));
		}
		num=0;
	}
	void insert(string s){
		int root=0;
		for(int i=s.size()-1;i>=0;i--){
			int x=s[i]-'0';
			if(a[root].p[x]==0){
				num++;
				a[root].p[x]=num;
			}
			root=a[root].p[x];
			a[root].cnt++;
			a[root].isword=0;
		}
		a[root].isword=1;
	}
	int ph_cnt=0;
	string ph_ans=0;
	void query_ans(int root,string st){
		if(a[root].isword){
			ph_cnt++;
			ph_ans=ph_ans+st+" ";
			return ;
		}
		for(int x=0;x<9;x++){
			if(!a[root].p[x]){
				continue;
			}
			query_ans(a[root].p[x],char(x+'0')+st);
		}
	}
};
string name[20];
map<string,Trie> mp;
int n;
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>name[i];
		int x;
		cin>>x;
		for(int j=1;j<=x;j++){
			string y;
			cin>>y;
			mp[name[i]].insert(y);
		}
	}
	for(int i=1;i<=n;i++){
		if(mp[name[i]].flag){
			continue;
		}
		mp[name[i]].flag=1;
		mp[name[i]].query_ans(0,"");
		cout<<name[i]<<' '<<mp[name[i]].ph_cnt<<' '<<mp[name[i]].ph_ans<<endl;
	}
	return 0;
}
2024/7/12 19:50
加载中...