• POJ2503:Babelfish


    浅谈(Trie)https://www.cnblogs.com/AKMer/p/10444829.html

    题目传送门:http://poj.org/problem?id=2503

    (Trie)树模板题,就是要你实现一个字典查找的功能。读入十分的恶心。

    时间复杂度:(O(len*n))

    空间复杂度:(O(len))

    代码如下:

    #include <cstdio>
    #include <cstring>
    using namespace std;
    
    const int maxn=1e5+5;
    
    char s[maxn<<1],s1[maxn],s2[maxn];
    
    struct Trie {
    	int tot;
    	char s[maxn*10][15];
    	int son[maxn*10][26];
    
    	void ins() {
    		int pos=1,len=strlen(s2+1);
    		for(int i=1;i<=len;i++) {
    			if(son[pos][s2[i]-'a'])pos=son[pos][s2[i]-'a'];
    			else pos=son[pos][s2[i]-'a']=++tot;
    		}
    		len=strlen(s1+1);
    		for(int i=1;i<=len;i++)
    			s[pos][i]=s1[i];
    	}
    
    	void find() {
    		int pos=1,len=strlen(s1+1);
    		for(int i=1;i<=len;i++) {
    			if(son[pos][s1[i]-'a'])pos=son[pos][s1[i]-'a'];
    			else {puts("eh");return;}
    		}
    		if(!strlen(s[pos]+1))puts("eh");
    		else printf("%s
    ",s[pos]+1);
    	}
    }T;
    
    int main() {
    	T.tot=1;
    	while(1) {
    		int n,pos;
    		scanf("%[^
    ]",s+1);getchar();
    		if((n=strlen(s+1))==0)break;
    		for(int i=1;i<=n;i++)
    			if(s[i]==' ') {pos=i;break;}
    		for(int i=1;i<pos;i++)s1[i]=s[i];
    		for(int i=pos+1;i<=n;i++)s2[i-pos]=s[i];
    		T.ins(),memset(s,0,(n+1)*4);
    	}
    	while(~scanf("%s",s1+1))T.find();
    	return 0;
    }
    
  • 相关阅读:
    HDU 2795
    HDU 1394
    HDU 1754
    HDU 1166
    SDOI 2006
    HDU 1423
    HDU 1561
    centos7.4 搭建zabbix-server 3.4.5
    vim 简单笔记
    jdk环境并配置环境变量
  • 原文地址:https://www.cnblogs.com/AKMer/p/10445271.html
Copyright © 2020-2023  润新知