HDU - 5557 Matching Compressed String (自动机+倍增+表达式计算)
题意是给你一个自动机和一个字符串的括号表达式,问自动机能否接受这个字符串。
我一想,这不就是个模拟栈计算表达式+倍增么?
再一想,复杂度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 (自动机+倍增+表达式计算)的更多相关文章
- hdu 2586 How far away ?倍增LCA
hdu 2586 How far away ?倍增LCA 题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2586 思路: 针对询问次数多的时候,采取倍增 ...
- hdu 2896 病毒侵袭 AC自动机(查找包含哪些子串)
病毒侵袭 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- hdu 2896 病毒侵袭 ac自动机
/* hdu 2896 病毒侵袭 ac自动机 从题意得知,模式串中没有重复的串出现,所以结构体中可以将last[](后缀链接)数组去掉 last[]数组主要是记录具有相同后缀模式串的末尾节点编号 .本 ...
- HDU 5842 Lweb and String(Lweb与字符串)
p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-s ...
- hdu 4850 Wow! Such String! 欧拉回路
作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4080264.html 题目链接:hdu 4850 Wow! Such String! 欧拉回 ...
- hdu 3553 Just a String (后缀数组)
hdu 3553 Just a String (后缀数组) 题意:很简单,问一个字符串的第k大的子串是谁. 解题思路:后缀数组.先预处理一遍,把能算的都算出来.将后缀按sa排序,假如我们知道答案在那个 ...
- [leetcode-604-Design Compressed String Iterator]
Design and implement a data structure for a compressed string iterator. It should support the follow ...
- LeetCode 604. Design Compressed String Iterator (设计压缩字符迭代器)$
Design and implement a data structure for a compressed string iterator. It should support the follow ...
- [LeetCode] Design Compressed String Iterator 设计压缩字符串的迭代器
Design and implement a data structure for a compressed string iterator. It should support the follow ...
随机推荐
- 深入剖析Java虚拟机内存结构
深入剖析Java虚拟机内存模型 JVM整体架构 JVM整体架构如下: 通过编写代码来分析整个内存区域 public class Math { public static final Integer C ...
- 监听input框变化,即时搜索 compositionstart, compositionend
前话: 如果直接通过input监听, 它是键盘输入按键按下了就触发时间,这样可能导致一些问题,比如在谷歌浏览器想输入中文输入不了: 解决方案: 用 compositionstart 和 composi ...
- Reactor系列(五)map映射
#java# #reactor# #flux# #map# #映射# 视频解视: https://www.bilibili.com/video/av79179444/ FluxMonoTestCase ...
- gRPC安装的小问题
INSTALL.md提到下述前提条件 #Pre-requisites ##Linux ```sh $ [sudo] apt-get install build-essential autoconf l ...
- sysbench的简单安装
1. 下载 可以到网站上面找 我用到的这个是201908最新的 wget https://src.fedoraproject.org/repo/pkgs/sysbench/sysbench-1.0.1 ...
- 【LOJ】#3051. 「十二省联考 2019」皮配
LOJ#3051. 「十二省联考 2019」皮配 当时我在考场上觉得这题很不可做... 当然,出了考场后再做,我还是没发现学校和城市是可以分开的,导致我还是不会 事实上,若一个城市投靠了某个阵营,学校 ...
- 异常处理 try
语法错误 这种错误的不能使用异常处理,你自己粗心写错怪谁,哼哼哼 比如说少冒号啦,丢了括号啦 逻辑错误 try: num = int(input("请输入数字")) print(1 ...
- Core dump文件和ECFS
core dump文件 core dump核心转储文件,一些信号的处理方式,会生成一个elf格式的文件,用来分析进程崩溃情况. 总结一下,core dump核心转储文件就是将所有的vma都映射成一个e ...
- MySQL 并发事务问题以及事务的隔离级别
一.并发事务处理带来的问题 相对于串行处理,并发事务(InnoDB)处理能大大增加数据库资源的利用率,提高数据库系统的事务吞吐量,从而可以支持更多用户. 但并发事务处理也会带来一些问题,主要有一下几种 ...
- docker 入门3 - 服务 【翻译】
入门,第 3 部分:服务 先决条件 安装 Docker 版本 1.13 或更高版本. 获取 Docker Compose.在适用于 Mac 和 Docker 桌面的 Windows 上,它已预安装,因 ...