zoukankan      html  css  js  c++  java
  • [POI2000]病毒

    (2021的第一篇博客,当鸽子好久了,开始沉淀

    题意

    给定一些(01)串,问是否存在一个任意长的(01)串不包含所给的任意一个(01)

    想法

    因为有多个文本串,所以明显考虑(AC自动机),不同的是这次是要我们来找原串,我们可以发现将(trie)树进行(fail)边匹配的时候
    其实是把树扩展了图。
    如果存在这样一个原串 可以不包含任意一个串 那我们来想一下他在自动机上要怎么匹配
    显然是会一直匹配下去,形成一个环!
    所以我们在(trie)图上找环即可,注意当一个点的(fail)边所对应的节点是结束节点的话,要把这个点也认为是结束节点

    代码

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<queue>
    #define ll long long
    
    ll n,cnt;
    
    using std::queue;
    
    char num[30005];
    
    ll trie[40000][5],fail[40000];
    
    bool end[40000];
    
    void insert(){
    	ll now = 0;
    	ll len = strlen(num + 1);
    	for(int i = 1;i <= len;++i){
    		if(!trie[now][num[i] - '0'])
    		++cnt,trie[now][num[i] - '0'] = cnt;;
    		now = trie[now][num[i] - '0'];
    	}
    	end[now] = 1;
    }
    
    queue<int>QWQ;
    
    void get_fail(){
    	for(int i = 0;i <= 1;++i)
    	if(trie[0][i]) fail[trie[0][i]] = 0,QWQ.push(trie[0][i]);
    	while(!QWQ.empty()){
    		int u = QWQ.front();QWQ.pop();
    		for(int i = 0;i <= 1;++i){
    		if(trie[u][i]) fail[trie[u][i]] = trie[fail[u]][i],QWQ.push(trie[u][i]);
    		else trie[u][i] = trie[fail[u]][i];
    		if(end[trie[fail[u]][i]])
    		end[trie[u][i]] = 1;
    		}
    	}
    }
    
    bool ins[40000],used[40000];
    
    bool get(ll now){
    	ins[now] = 1;
    	for(int i = 0;i < 2;++i){
    		int v = trie[now][i];
    		if(ins[v]) return 1;
    		if(used[v] || end[v]) continue;
    		used[v] = 1;
    		if(get(v)) return 1;
    	}
    	ins[now] = 0;
    	return 0;
    } 
    
    int main(){
    	scanf("%lld",&n);
    	for(int i = 1;i <= n;++i){
    		scanf("%s",num + 1);
    		insert();
    	}
    	get_fail();	
    	if(get(0))
    	puts("TAK");
    	else
    	puts("NIE");
    }
    
  • 相关阅读:
    iOS 面试题搜集
    iOS 常用第三方类库、完整APP示例
    iOS 键盘遮挡输入 解决办法
    iOS UIColor RGB HEX
    iOS APP性能优化
    iOS Swift 数组 交换元素的两种方法
    iOS CoreData primitive accessor
    iOS Start developing ios apps (OC) pdf
    iOS 传值方式
    iOS IB_DESIGNABLE IBInspectable @IBDesignable @IBInspectable 加速UI开发
  • 原文地址:https://www.cnblogs.com/dixiao/p/14243391.html
Copyright © 2011-2022 走看看