题意是给你一个自动机和一个字符串的括号表达式,问自动机能否接受这个字符串。

我一想,这不就是个模拟栈计算表达式+倍增么?

再一想,复杂度200*1000*10000*log(1e9),不对啊!

交上去试一发,卧槽A了?我:......

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=+,M=;
int n,len,m,k,ka,go[][M],ed[],sta1[N],sta2[N],tot,tp1,tp2,num,GO[N][],buf[];
char s[N];
int newnode() {
int u=++tot;
for(int i=; i<=n; ++i)GO[u][i]=i;
return u;
}
int main() {
int T;
for(scanf("%d",&T); T--;) {
scanf("%s",s),len=strlen(s);
scanf("%d%d%d",&n,&m,&k);
for(int i=; i<=n; ++i) {
ed[i]=;
memset(go[i],,sizeof go[i]);
}
while(k--) {
int x;
scanf("%d",&x),x++;
ed[x]=;
}
while(m--) {
int u,v;
char ch;
scanf("%d%d %c",&u,&v,&ch),u++,v++;
go[u][ch-'a']=v;
}
tot=tp1=tp2=num=;
sta1[tp1++]=newnode(),sta2[tp2++]=;
for(int i=; i<len; ++i) {
if(s[i]=='(') {
sta1[tp1++]=newnode();
sta2[tp2++]=num;
num=;
} else if(s[i]==')') {
int U=sta1[--tp1],k=sta2[--tp2];
for(; k; k>>=) {
if(k&)for(int i=; i<=n; ++i)GO[sta1[tp1-]][i]=GO[U][GO[sta1[tp1-]][i]];
for(int i=; i<=n; ++i)buf[i]=GO[U][GO[U][i]];
for(int i=; i<=n; ++i)GO[U][i]=buf[i];
}
} else if(isdigit(s[i])) {
num=num*+(s[i]-'');
} else if(islower(s[i])) {
int ch=s[i]-'a';
for(int i=; i<=n; ++i)
GO[sta1[tp1-]][i]=go[GO[sta1[tp1-]][i]][ch];
}
}
printf("Case #%d: %s\n",++ka,ed[GO[][]]?"Yes":"No");
}
return ;
}

HDU - 5557 Matching Compressed String (自动机+倍增+表达式计算)的更多相关文章

  1. hdu 2586 How far away ?倍增LCA

    hdu 2586 How far away ?倍增LCA 题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2586 思路: 针对询问次数多的时候,采取倍增 ...

  2. hdu 2896 病毒侵袭 AC自动机(查找包含哪些子串)

    病毒侵袭 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  3. hdu 2896 病毒侵袭 ac自动机

    /* hdu 2896 病毒侵袭 ac自动机 从题意得知,模式串中没有重复的串出现,所以结构体中可以将last[](后缀链接)数组去掉 last[]数组主要是记录具有相同后缀模式串的末尾节点编号 .本 ...

  4. HDU 5842 Lweb and String(Lweb与字符串)

    p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-s ...

  5. hdu 4850 Wow! Such String! 欧拉回路

    作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4080264.html 题目链接:hdu 4850 Wow! Such String! 欧拉回 ...

  6. hdu 3553 Just a String (后缀数组)

    hdu 3553 Just a String (后缀数组) 题意:很简单,问一个字符串的第k大的子串是谁. 解题思路:后缀数组.先预处理一遍,把能算的都算出来.将后缀按sa排序,假如我们知道答案在那个 ...

  7. [leetcode-604-Design Compressed String Iterator]

    Design and implement a data structure for a compressed string iterator. It should support the follow ...

  8. LeetCode 604. Design Compressed String Iterator (设计压缩字符迭代器)$

    Design and implement a data structure for a compressed string iterator. It should support the follow ...

  9. [LeetCode] Design Compressed String Iterator 设计压缩字符串的迭代器

    Design and implement a data structure for a compressed string iterator. It should support the follow ...

随机推荐

  1. img的src为空的时候,去除灰色的边框

  2. elasticsearch基本概念理解+elasticsearch 的shards unassigned处理方法 -- 最佳运维实践 - 集群规划

    1.es与MySQL的概念对比 2.概念理解 2.1 Index : 一个索引即是文档的集合 2.2 Document : 一个文档即是一个可被索引的基础单元信息,一条记录: 2.3 Replicas ...

  3. 《鸟哥的Linux私房菜:服务器搭建篇》第一部分学习笔记

    零.问题集 1. 我们购买网络时,有4M.5M.8M.10M乃至100M,运营商是如何控制每个用户的带宽的? 一.网络基础概念 1. 交换器与集线器最大的差异,在于交换器内有一个特别的内存, 这个内存 ...

  4. linux_mysql学习系列

    Linux&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 网站架构系列文章:http://www.cnblogs.co ...

  5. 处理vue页面406问题纪要

    1.servlet-mapping url-pattern / 与 /* 的区别注意关注 2.mvc:resource 是否生效,注意关注,如不生效,可在 web.xml中配置<servlet- ...

  6. 码云以及Git的使用

    码云以及Git的使用 码云就是一个远程管理的仓库,Git是用来上传和下载数据的工具. 首先访问网站 https://gitee.com/ 进行注册 注册完成后,进入如下页面 点击新建仓库 设置自己的仓 ...

  7. mysql批量修改数据库表引擎

    数据库表之前的引擎是MyISAM,影响事务操作,要改成Innodb引擎 查询表引擎 SELECT CONCAT(table_name,' ', engine) FROM information_sch ...

  8. Jmeter4.0---- jmeter中写入java代码_简单了解(15)

    1.说明 BeanShell:是一个小型嵌入式Java源代码解释器,具有对象脚本语言特性,能够动态地执行标准JAVA语法,并利用在JavaScript和Perl中常见的的松散类型.命令.闭包等通用脚本 ...

  9. dotnet跨平台 - 使用Nginx+Docker Compose运行.NETCore项目

    参考文档: https://docs.docker.com/install/linux/docker-ce/centos/ http://www.dockerinfo.net/document htt ...

  10. Sql语句知识大全

    1.经典SQL语句大全(绝对的经典) 2. 3. 4.一.基础 1.1.说明:创建数据库 2.CREATE DATABASE database-name 3.2.说明:删除数据库 4.drop dat ...