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

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

再一想,复杂度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. golang的time包:时间字符串和时间戳的相互转换

    本博客转自: https://blog.csdn.net/mirage003/article/details/86073046 package main import ( "log" ...

  2. Mac终端 bash和zsh切换方法

    切换到bash chsh -s /bin/bash 切换到zsh chsh -s /bin/zsh 终端重启后生效

  3. mingw-w64 gcc std::thread 行为异常

    我用的 ming-w64 gcc 是通过 MSYS2 安装的,包名是 mingw-w64-x86_64-gcc,版本 9.2.0-2. 我发现 std::thread 行为异常. int main() ...

  4. 20190805-Python基础 第二章 列表和元组(2)列表

    1. list函数,用于将字符串转换为列表 2. 基本的列表操作 修改列表 - 给元素赋值,使用索引表示法给特定的元素赋值,如x[1] = 2 删除元素 - 使用del语句即可 name1 = ['a ...

  5. 关于BIOS系统的认识和学习(源自摘录)

    BIOS系统的介绍与学习 BIOS (basic input output system 即基本输入输出系统)在计算机系统中起着非常重要的作用,其是计算机系统最底层的设置, BIOS设置程序是被固化到 ...

  6. HTML练习一

    效果图 动态图 html代码 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...

  7. JavaScript实现按照指定长度为数字前面补零输出的方法

    本文实例讲述了JavaScript实现按照指定长度为数字前面补零输出的方法.分享给大家供大家参考.具体分析如下: 例如我们希望输出的数字长度是固定的,假设为10,如果数字为123,则输出0000000 ...

  8. [NOIP10.5模拟赛]3.c题解--思维

    题目链接 这次不咕了 https://www.luogu.org/problemnew/show/AT2389 闲扯 考场20分爆搜走人 \cy 话说这几天T3都很考验思维啊 分析 我们先钦定一只鸡( ...

  9. python简答

    解释 GIL 全局解释器锁 def func(*args): for i in args: print(i) func(3,2,1,4,7) 在我们不知道该传递多少关键字参数时,使用**kwargs ...

  10. Arcgis js之web墨卡托(3857)转经纬度坐标(4326)

    Arcgis js之web墨卡托(3857)转经纬度坐标(4326) 手动转化方法: function mercatorTolonlat(mercator){ var lonlat={x:0,y:0} ...