题面传送门 又好久没做过 AC 自动机的题了,做道练练手罢( 首先考虑对于某个固定的字符串怎样求出它的伤害,我们考虑贪心,每碰到出现一个模式串就将其划分为一段,最终该字符串的代价就是划分的次数.具体来说我们记录一个 \(pre\) 表示上一次在 \(pre\) 与 \(pre-1\) 划分为一段,我们从前往后扫一遍,每扫到一个 \(i\),就检验 \(s[pre...i],s[pre+1...i],s[pre+2...i],\cdots,s[i...i]\) 中是否有子串在模式串中出现过,如果有…
题目大意: http://www.lydsy.com/JudgeOnline/problem.php?id=2553 题解: 利用AC自动机的dp求出所有的转移 然后将所有的转移储存到矩阵中,进行矩阵乘法即可 #include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef long long ll; inline void read(int &x){ x…
题目描述 输入 注意 是0<=P 输出 样例输入 样例输出 题解 AC自动机+矩阵乘法 先将所有字符串放到AC自动机中,求出Trie图. 然后构建邻接矩阵:如果x不是某个字符串的末位置,则x连向next[x][i],边权为pi/qi:否则x只连向x,边权为1. 然后这个矩阵的无穷次方即为答案. 由于这个矩阵乘了很多次后概率基本不变,可以认定为答案.所以我们可以将这个矩阵自乘50次(相当于求出这个矩阵的2^50次方),得出答案. #include <cstdio> #include <…
原文链接http://www.cnblogs.com/zhouzhendong/p/8196279.html 题目传送门 - BZOJ2553 题意概括 引用一下lych大佬的: 在字母只有前alphabet时,给定N个串,求长度为len的串包含这些N个串的个数最大值的期望值. 题解 我们首先发现总共的字符个数才就75个,那么闭着眼睛先建一个AC自动机,Trie图建好.反正代码不长. 然后我们发现长度很大,显然就是要往矩阵快速幂那里考虑. 我们可以用矩阵来快速计算到达AC自动机的每一个位置的概率…
bzoj 2553 [BJOI2011]禁忌 题目描述: Magic Land上的人们总是提起那个传说:他们的祖先John在那个东方岛屿帮助Koishi与其姐姐Satori最终战平.而后,Koishi恢复了读心的能力…… 如今,在John已经成为传说的时代,再次造访那座岛屿的人们却发现Koishi遇到了新麻烦. 这次她遇到了Flandre Scarlet——她拥有可以使用禁忌魔法而不会受到伤害的能力. 为了说明什么是禁忌魔法及其伤害,引入以下概念: 1.字母集A上的每个非空字符串对应了一个魔法.…
题目传送门 -------------------------------------- 过年在家无聊补一下这周做的几道AC自动机的模板题 sol:AC自动机,还是要解决跳fail边产生的重复访问,但是这次用last边已经不行了,只能拿76分.我们把跳fail边的过程放到串扫描完之后一次性进行. AC自动机 #include <bits/stdc++.h> using namespace std; typedef long long LL; typedef pair<int, int&g…
题目描述 小张最近在忙毕设,所以一直在读论文.一篇论文是由许多单词组成但小张发现一个单词会在论文中出现很多次,他想知道每个单词分别在论文中出现了多少次. 输入输出格式 输入格式: 第一行一个整数N,表示有N个单词.接下来N行每行一个单词,每个单词都由小写字母(a-z)组成.(N≤200) 输出格式: 输出N个整数,第i行的数表示第i个单词在文章中出现了多少次. 输入输出样例 输入样例#1: 复制 3 a aa aaa 输出样例#1: 复制 6 3 1 说明 数据范围 30%的数据, 单词总长度不…
正解:AC自动机 解题报告: 传送门! 先来提供一个40pts错解QAQ 首先看到这题就会想到AC自动机板子题2鸭!然后就照着那题的套路打一下,随便改一点儿,简单来说就是每次经过一个节点都要++,然后每搜到一个节点就暴跳所有fail,tr[fail].as+=tr[nw].as 然后你就能得到40pts的好成绩,,,另外60pts还是WA的,,,就很难过,,, #include<bits/stdc++.h> using namespace std; #define ll int #define…
正解:AC自动机 解题报告: 传送门! 首先看到这种题目二话不说先把trie树和fail指针建立起来 然后就想鸭,如果我们想让模式串和文本串尽量不能匹配,就要想办法让它跳fail指针,而不是继续往下走,是趴 然后如果我可以一直跳fail指针始终没有到达文本串的结尾,就说明是可以构造一个无限长的字符串的对趴 于是就变成了,有一个图(trie树+fail指针指向的边就构成了一个图了嘛),如果能找到一个不包含文本串结尾节点的环就说明欧克,否则无法构造 就over辣! 昂还有个小技巧昂,就是在dfs找环…
题目描述 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码段,试问,是否存在一个无限长的安全的二进制代码. 示例: 例如如果{011, 11, 00000}为病毒代码段,那么一个可能的无限长安全代码就是010101….如果{01, 11, 000000}为病毒代码段,那么就不存在一个无限长的安全代码. 任务: 请写一个程序: 1.在文本文件WIR.IN中读入病毒代码:…