摘要: 题意:给出一个n*m的字符矩阵T,你的任务是找出给定的x*y的字符矩阵P在T中出现了多少次.分析:要想整个矩阵匹配,至少各行都得匹配。所以先把P的每行看做一个模式串构造出AC自动机,然后在T中的各行逐一匹配,找到P中每一行的所有匹配点。只要在匹配时做一些附加操作,就可以把匹配出来的单一的行拼成矩形。用一个d[r][c]表示T中一(r,c)为右上角,与P等大的矩形中有多少个完整的行和P对应位置的行完全相同.当P的第i行出现在T的第r行,起始列编号为c时,意味着d[r-i][c]应当加1.所有匹配结束后,d[r][c]=X的那些就是一个二维匹配点.注意:模式串有可能相同,因此需要一个链表来相同的模 阅读全文
posted @ 2013-03-23 20:14 z.arbitrary 阅读(1207) 评论(0) 推荐(0) 编辑
摘要: 刘汝佳新书-----训练指南题意:给出一些字符和各自对应的选择概率,随机选择L次后将得到一个长度为L的随机字符串S.给出K个模版串,计算S不包含任何一个串的概率分析:构造AC自动机之后,没随机生成一个字母,相当于在AC自动机中随机走一步.所有单词结点标记为"禁止",则本题就是求从结点0开始走L步,不进入任何静止结点的概率.d[i][j]表示当前在结点i,还要走j步,不碰到任何禁止结点的概率.在计算last的语句后面加一个val[u]|=val[f[u]],来计算禁止结点// File Name: 11468.cpp// Author: zlbing// Created Time: 2013/3 阅读全文
posted @ 2013-03-23 14:20 z.arbitrary 阅读(871) 评论(0) 推荐(0) 编辑