zoukankan      html  css  js  c++  java
  • 字典(Trie)树

    本文共三道题目,都算是 $ Trie $ 树的模板题

    1.Libre 10049 Phone List

    Code

    #include<cmath>
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define LL long long
    using namespace std;
    int T,n,rot,trie[100005][15];
    bool flag,book[100005];
    char ch[15];
    bool insert(char s[])
    {
    	int u=0,len=strlen(s);
    	bool frog=0;
    	for(int i=0;i<len;i++)
    	{
    		int v=s[i]-'0';
    		if(!trie[u][v]) trie[u][v]=++rot;
    		else if(i==len-1) frog=1;
    		u=trie[u][v];
    		if(book[u]) frog=1;
    	}
    	book[u]=1;
    	return frog;
    }
    int main()
    {
    	scanf("%d",&T);
    	while(T--)
    	{
    		flag=0,rot=0;
    		memset(trie,0,sizeof(trie));
    		memset(book,0,sizeof(book));
    		scanf("%d",&n);
    		for(int i=1;i<=n;i++)
    		{
    			cin>>ch;
    			if(!flag&&insert(ch)) flag=1;
    		}
    		if(flag) puts("NO");
    		else puts("YES");
    	}
    	return 0;
    }
    

    2.Libre 10050 The XOR Largest Pair

    Code

    #include<cmath>
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define LL long long
    using namespace std;
    const int N=1e5+5;
    int n,rot,ans,a[N],trie[N<<5][2];
    void insert(int x)
    {
    	int u=0;
    	for(int i=1<<30;i;i>>=1)
    	{
    		int v=(x&i)?1:0;
    		if(!trie[u][v]) trie[u][v]=++rot;
    		u=trie[u][v];
    	}
    	return;
    }
    int find(int x)
    {
    	int u=0,res=0;
    	for(int i=1<<30;i;i>>=1)
    	{
    		int v=(x&i)?1:0;
    		if(trie[u][!v])
    		{
    			res+=i;
    			u=trie[u][!v];
    		}
    		else u=trie[u][v];
    	}
    	return res;
    }
    int main()
    {
    	scanf("%d",&n);
    	for(int i=1;i<=n;i++)
    	{
    		scanf("%d",&a[i]);
    		insert(a[i]);
    		ans=max(ans,find(a[i]));
    	}
    	printf("%d
    ",ans);
    	return 0;
    }
    

    3.Libre 10051 Nikitosh 和异或

    Code

    #include<cmath>
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #define LL long long
    using namespace std;
    const int N=4e5+5;
    int n,rot,now,ans,a[N],trie[N<<5][2],l[N],r[N];
    void insert(int x)
    {
    	int u=0;
    	for(int i=1<<30;i;i>>=1)
    	{
    		int v=(x&i)?1:0;
    		if(!trie[u][v]) trie[u][v]=++rot;
    		u=trie[u][v];
    	}
    	return;
    }
    int find(int x)
    {
    	int u=0,res=0;
    	for(int i=1<<30;i;i>>=1)
    	{
    		int v=(x&i)?1:0;
    		if(trie[u][!v])
    		{
    			res+=i;
    			u=trie[u][!v];
    		}
    		else u=trie[u][v];
    	}
    	return res;
    }
    int main()
    {
    	scanf("%d",&n);
    	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
    	insert(now);
    	for(int i=1;i<=n;i++)
    	{
    		now^=a[i];
    		insert(now);
    		l[i]=max(l[i-1],find(now));
    	}
    	now=0,rot=0;
    	memset(trie,0,sizeof(trie));
    	insert(now);
    	for(int i=n;i>=1;i--)
    	{
    		now^=a[i];
    		insert(now);
    		r[i]=max(r[i+1],find(now));
    	}
    	for(int i=1;i<n;i++) ans=max(ans,l[i]+r[i+1]);
    	printf("%d
    ",ans);
    	return 0;
    }
    
    Classical is something not fade,but grow more precious with time pass by,so is dream.梦想这东西和经典一样,永远不会因为时间而褪色,反而更显珍贵。
  • 相关阅读:
    Android开发简单计算器
    解决eclipse在开发Android过程中崩溃的问题
    通过Button改变TextView文字颜色
    startActivityForResult方法解决Activity之间数据的保存问题
    A4Desk 网站破解
    windows不为人知的命令集合
    oracle常见故障恢复
    oracle的sql优化
    unix常用抓包方法
    EXT3fs error故障
  • 原文地址:https://www.cnblogs.com/Hawking-llfz/p/11469002.html
Copyright © 2011-2022 走看看