P1571 眼红的Medusa 的一种奇怪的思路
代码如下
#include<bits/stdc++.h>
using namespace std;
const int N=1e7+10;
int trie[N][10],cnt;
bool e[N];
void insert(int v){
int p=0;
while(v){
int u=v%10;
v/=10;
if(!trie[p][u])
trie[p][u]=++cnt;
p=trie[p][u];
}
e[p]=1;
}
int find(int v){
int p=0;
while(v){
int u=v%10;
v/=10;
p=trie[p][u];
if(!p) return 0;
}
if(e[p]) return p;
else return 0;
}
struct ans{
int lev,id;
}a[100010];
int la=0;
bool cmp(ans x,ans y){
return x.lev<y.lev;
}
int main(){
int n,m,t;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%d",&t);
insert(t);
}
for(int i=1;i<=m;i++){
scanf("%d",&t);
int k=find(t);
if(k){
la++;
a[la].id=t;
a[la].lev=k;
}
}
sort(a+1,a+la+1,cmp);
for(int i=1;i<=la;i++){
printf("%d ",a[i].id);
}
return 0;
}