首页 > TAG信息列表 > POI2000

【字符串】#2938. [Poi2000]病毒

分析 不难想到使用 Trie 图来模拟匹配的过程。 那么要求的就等价于:判断是否可以从 Trie 图的根节点 \(0\) 出发不经过非法节点找到一个环。 而非法节点则等价于:插入的模式串在 Trie 中对应的叶子节点 \(t\)、满足 \(fail[u]=t\) 的所有节点 \(u\)。 最后使用一遍 \(\texttt{dfs}\)

洛谷 P5546 [POI2000]公共串(后缀数组+并查集)

https://www.luogu.com.cn/problem/P5546   求n个单词的最长公共子串长度   单次中间用不同的字符拼起来 用后缀数组求出height之后 按height从大到小枚举lcp,并查集合并 对每个后缀标记属于哪个单词 直到合并到某个标记出现了所有单词结束 当前枚举的height就是最长公共子串长度

【YBTOJ】【Luogu P2444】[POI2000]病毒

链接: 洛谷 题目大意: 构造一个无限长的文本串,使得此串不能被匹配。 正文: 好题。我的一开始的思路是,像 01trie 求最大异或那样跑 trie,然后跳失配指针判断合法。但显然假了。 于是得深度思考题意,“不能被匹配”说明跑 trie 时尽量失配,那么在求出失配指针后被修改的 trie 可以往失配方

#Multi-SG#BZOJ 2940 [POI2000] 条纹

题目 有\(n\)个格子,可以选择三种长度的线段覆盖,不能重叠, 无法覆盖者为负,问先手是否必胜,\(n\leq 10^3\) 分析 考虑选择一个位置覆盖则该局面分成两个局面, 直接求出SG函数不为0先手必胜即可 代码 #include <cstdio> #include <cctype> #define rr register using namespace std; i

P2444 [POI2000]病毒

链接 洛谷P2444(数据很水) LOJ#10062 题解 这题问我们能否构造一个无限长的串使得所有模式串均无法匹配,也就是说这个长串会在AC自动机上绕来绕去,不经过任何一个模式串的结尾。所以在trie图中有两类结点不能经过:表示单词结尾的结点和fail指针指向单词结尾的结点。如果剩下的trie

[POI2000]病毒

(2021的第一篇博客,当鸽子好久了,开始沉淀) 题意 给定一些\(01\)串,问是否存在一个任意长的\(01\)串不包含所给的任意一个\(01\)串 想法 因为有多个文本串,所以明显考虑\(AC自动机\),不同的是这次是要我们来找原串,我们可以发现将\(trie\)树进行\(fail\)边匹配的时候 其实是把树扩展了图。

P5546-[POI2000]公共串【SAM】

正题 题面链接:https://www.luogu.com.cn/problem/P5546 题目大意 求 n n n个串的最长公共子串。 解题思路 注意到最长公共子串一定是其中所有的子串,所以我们可以先随意对一个串构建

【字符串哈希】P5546 [POI2000]公共串

  直接二分答案,然后用一个map记录一下1到n-1串长度为mid的hash值,再和n行一个个比较就好了   代码 #include<bits/stdc++.h> using namespace std; typedef long long ll; char s[6][2005]; int sum[6][2005],n; ll jc[2005],has[6][2005]; ll base=133; map <int,ll> G[6]; v

Poi2000病毒

zz://https://www.cnblogs.com/Miracevin/p/9710746.html 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码。如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的。现在委员会已经找出了所有的病毒代码段,试问,是否存在一个无限长的安全的

BZOJ2938:[POI2000] 病毒

Description 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码。如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的。现在委员会已经找出了所有的病毒代码段,试问,是否存在一个无限长的安全的二进制代码。 示例: 例如如果{011, 11, 00000}

Luogu5546/BZOJ2946 [POI2000]公共串

题目传送门 算法分析 和Sandy的卡片几乎是同一题我们证明了中国OI的POI性。 具体算法分析见Luogu2463/BZOJ4698 [SDOI2008]Sandy的卡片 要注意是否存在完全一样的字符串,此时的分隔符要注意。 代码实现 #include<bits/stdc++.h> using namespace std; #define maxn 200005 #define

【POI2000】病毒

Description 给定若干模式串,求是否存在一个无限长的文本串使得所有模式串均不能在此文本串中匹配。 Solution 这是一道AC自动机的变式,我们首先将这些模式串在Trie树上存储,以便AC自动机的操作。 我们这样思考:在我们存储Trie时,我们将每一个串的末尾标记一下,表示这是一个模式串的结尾,

P2444 [POI2000]病毒

P2444 [POI2000]病毒 题目描述 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码。如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的。现在委员会已经找出了所有的病毒代码段,试问,是否存在一个无限长的安全的二进制代码。 示例: 例如如果{

[POI2000]病毒

Description: 给出n个01串,求是否存在一个无限长度的01串不包含这n个中任意一个串 Solution: 发现只要在Trie图上找到一个不经过任何病毒串结尾位置的环即可 #include<bits/stdc++.h> using namespace std; const int mxn=3e4+5; int vis[mxn],ar[mxn]; char str[mxn],p[7500],ans[5]

洛谷P2444 病毒 [POI2000] AC自动机

正解:AC自动机 解题报告: 传送门! 首先看到这种题目二话不说先把trie树和fail指针建立起来 然后就想鸭,如果我们想让模式串和文本串尽量不能匹配,就要想办法让它跳fail指针,而不是继续往下走,是趴 然后如果我可以一直跳fail指针始终没有到达文本串的结尾,就说明是可以构造一个无限