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

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

再一想,复杂度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. ie兼容promise

    引入 <script src = "https://cdn.polyfill.io/v2/polyfill.min.js"></script> 或 < ...

  2. CentOS 7系统KVM虚拟机安装过程详解

    什么是 KVM ? KVM 在标准的 Linux 内核中增加了虚拟技术,从而我们可以通过优化的内核来使用虚拟技术.在 KVM 模型中,每一个虚拟机都是一个由 Linux 调度程序管理的标准进程,你可以 ...

  3. centos7 64位如何配置网络

    在虚拟机的操作的时候,修改  ifcfg-eno16777736 可能没有权限 su - //进入root用户状态chmod a+w  ifcfg-eno16777736//把该文件修改为可写状态 我 ...

  4. B8 Concurrent JDK中的乐观锁与原子类

    [概述] 乐观锁采用的是一种无锁的思想,总是假设最好的情况,认为一个事务在读取数据的时候,不会有别的事务对数据进行修改,只需要在修改数据的时候判断原数据数据是否已经被修改了.JDK 中 java.ut ...

  5. LUA的table实现

    数据结构 下面的结构体是lua中所定义的table typedef struct Table { CommonHeader; lu_byte flags; /* 1<<p means ta ...

  6. Kubernetes---容器探针

    ⒈含义 探针是由各个节点的kubelet对容器执行的定期诊断.要执行诊断,kubelet 调用由容器实现的Handler[处理程序].有三种类型的处理程序: >ExecAction:在容器内执行 ...

  7. vs code在打开新文件是覆盖上一个窗口的问题

    设置里面有个 enablePreview 去掉就好

  8. linux下shell 脚本 中windows换行符换成linux换行符

    sed -i 's/\r//' filename window下默认是 \r\n linux下是\n unix下是\r

  9. 【广搜】Keyboarding

    题目描述 给定一个r行c列的在电视上的“虚拟键盘”,通过“上,下,左,右,选择”共5个控制键,你可以移动电视屏幕上的光标来打印文本.一开始,光标在键盘的左上角,每次按方向键,光标总是跳到下一个在该方向 ...

  10. linux 安装telnet

    一.CentOS下查看系统是否已安装telnet rpm -qa | grep telnet telnet 是挂在 xinetd 底下的,所以同时查看是否安装了xinetd服务 rpm -qa | g ...