我只是想记一下最近写的题目而已喵~

题解什么的才懒得写呢~

[poj 1625]Censored!

这题注意一个地方,就是输入数据中可能有 ASCII 大于 128 的情况,也就是说用 char 读入时,这个字符的值为负数,真是 RE 了好久……

可以像我一样 map 党,你也可以把每个 s[i] 都加上 128

 #include <cstdio>
#include <cstring>
#include <map>
#define max(x, y) ((x)>(y) ? (x):(y))
const int digit=;
const int sizeOfLen=;
const int sizeOfMemory=;
const int sizeOfType=; struct bigint
{
int len;
int a[];
inline bigint():len() {memset(a, , sizeof(a));}
inline bigint & operator = (int x) {a[]=x; return *this;}
inline bigint & operator += (bigint x)
{
len=max(len, x.len);
for (int i=;i<len;i++)
{
a[i]+=x.a[i];
a[i+]+=a[i]/digit;
a[i]%=digit;
}
for ( ;a[len];len++) a[len+]=a[len]/digit, a[len]%=digit;
return *this;
}
inline void print()
{
printf("%d", a[len-]);
for (int i=len-;i>=;i--) printf("%08d", a[i]);
putchar('\n');
}
}; int N, M, P;
char str[sizeOfLen];
bigint f[sizeOfLen][sizeOfMemory];
std::map<char, int> ord;
inline void dynamicProgram(); namespace trieDfa
{
struct node
{
int order;
bool end;
node * fail;
node * ch[sizeOfType];
};
node memory[sizeOfMemory]; int port;
node * dfa=memory;
inline node * newnode()
{
node * ret=memory+port;
ret->order=port++;
ret->end=;
ret->fail=NULL;
memset(ret->ch, , sizeof(ret->ch));
return ret;
}
inline void clear() {port=; dfa=newnode();} inline void insert(char * s)
{
int len=strlen(s);
node * t=dfa;
for (int i=;i<len;i++)
{
if (!t->ch[ord[str[i]]]) t->ch[ord[str[i]]]=newnode();
t=t->ch[ord[str[i]]];
}
t->end=;
}
inline void buildDfa()
{
static node * queue[sizeOfMemory];
int l=, r=; dfa->fail=dfa;
for (int i=;i<N;i++)
if (!dfa->ch[i]) dfa->ch[i]=dfa;
else dfa->ch[i]->fail=dfa, queue[r++]=dfa->ch[i]; for ( ;l<r; )
{
node * u=queue[l++];
u->end|=u->fail->end;
for (int i=;i<N;i++)
if (u->ch[i])
{
u->ch[i]->fail=u->fail->ch[i];
queue[r++]=u->ch[i];
}
else
u->ch[i]=u->fail->ch[i];
}
}
} int main()
{
scanf("%d %d %d", &N, &M, &P);
scanf("%s", str);
for (int i=;i<N;i++) ord[str[i]]=i;
trieDfa::clear();
for (int i=;i<P;i++)
{
scanf("%s", str);
trieDfa::insert(str);
} dynamicProgram(); return ;
}
inline void dynamicProgram()
{
bigint ret; trieDfa::buildDfa(); f[][]=;
for (int i=;i<M;i++)
for (int j=;j<trieDfa::port;j++)
for (int k=;k<N;k++) if (!trieDfa::dfa[j].ch[k]->end)
f[i+][trieDfa::dfa[j].ch[k]->order]+=f[i][j];
ret=;
for (int i=;i<trieDfa::port;i++) if (!trieDfa::dfa[i].end)
ret+=f[M][i];
ret.print();
}

本傻装B系列1

[hdu 2896]病毒侵袭

这真是裸体,而且数据没有 poj 那道丧心病狂

 #include <cstdio>
#include <cstring>
const int sizeOfVirus=;
const int sizeOfText=;
const int sizeOfType=;
const int sizeOfMemory=; int N, M;
char str[sizeOfText];
int virus[sizeOfMemory];
bool vis[sizeOfVirus]; namespace IOspace
{
inline int getint()
{
register int num=;
register char ch;
do ch=getchar(); while (ch<'' || ch>'');
do num=num*+ch-'', ch=getchar(); while (ch>='' && ch<='');
return num;
}
inline void putint(int num)
{
char stack[];
register int top=;
for ( ;num;num/=) stack[++top]=num%+'';
for ( ;top;top--) putchar(stack[top]);
}
} namespace trieDfa
{
struct node
{
int order;
bool end;
node * fail, * last;
node * ch[sizeOfType];
};
node memory[sizeOfMemory]; int port;
node * dfa=memory;
inline node * newnode()
{
node * ret=memory+port;
ret->order=port++;
ret->end=false;
ret->fail=ret->last=NULL;
memset(ret->ch, , sizeof(ret->ch));
return ret;
}
inline void clear() {port=; dfa=newnode();} inline void insert(char * s, int k)
{
int len=strlen(s);
node * t=dfa;
for (int i=;i<len;i++)
{
if (!t->ch[s[i]]) t->ch[s[i]]=newnode();
t=t->ch[s[i]];
}
t->end=true;
virus[t->order]=k;
}
inline void buildDfa()
{
static node * queue[sizeOfMemory];
int l=, r=; dfa->fail=dfa;
for (int i=;i<sizeOfType;i++)
if (!dfa->ch[i]) dfa->ch[i]=dfa;
else dfa->ch[i]->fail=dfa, queue[r++]=dfa->ch[i]; for ( ;l<r; )
{
node * u=queue[l++];
for (int i=;i<sizeOfType;i++)
if (u->ch[i])
{
u->ch[i]->fail=u->fail->ch[i];
u->ch[i]->last=u->ch[i]->fail->end?u->ch[i]->fail:u->ch[i]->fail->last;
queue[r++]=u->ch[i];
}
else
u->ch[i]=u->fail->ch[i];
}
}
inline bool search(char * s)
{
bool flag=;
int len=strlen(s); node * t=dfa;
memset(vis, , sizeof(vis));
for (int i=;i<len;i++)
{
t=t->ch[s[i]];
if (t->end) vis[virus[t->order]]=flag=true;
for (node * j=t->last;j;j=j->last)
vis[virus[j->order]]=flag=true;
} return flag;
}
} int main()
{
int tot=; N=IOspace::getint();
trieDfa::clear();
for (int i=;i<=N;i++)
{
scanf("%s", str);
trieDfa::insert(str, i);
}
trieDfa::buildDfa(); M=IOspace::getint();
for (int i=;i<=M;i++)
{
scanf("%s", str);
bool flag=trieDfa::search(str);
tot+=flag; if (flag)
{
printf("web %d:", i);
for (int i=;i<=N;i++) if (vis[i])
putchar(' '), IOspace::putint(i);
putchar('\n');
}
}
printf("total: %d\n", tot); return ;
}

本傻装B系列2

[AC自动机]题目合计的更多相关文章

  1. AC自动机-题目集合

    AC自动机-题目集合 模板 如果你想要学习AC自动机,推荐一些学习资料. 学习可以看这篇博客 http://blog.csdn.net/niushuai666/article/details/7002 ...

  2. KMP,Trie,AC自动机题目集

    字符串算法并不多,KMP,trie,AC自动机就是其中几个最经典的.字符串的题目灵活多变也有许多套路,需要多做题才能体会.这里收集了许多前辈的题目做个集合,方便自己回忆. KMP题目:https:// ...

  3. AC自动机题目汇总

    POJ 4052 ZJU 3430 HDU 4117 HNU 10104 HDU 2457 HNU 11187 ZJU 3545 HDU 3341

  4. hdu 2896 AC自动机

    // hdu 2896 AC自动机 // // 题目大意: // // 给你n个短串,然后给你q串长字符串,要求每个长字符串中 // 是否出现短串,出现的短串各是什么 // // 解题思路: // / ...

  5. hdu 3065 AC自动机

    // hdu 3065 AC自动机 // // 题目大意: // // 给你n个短串,然后给你一个长串,问:各个短串在长串中,出现了多少次 // // 解题思路: // // AC自动机,插入,构建, ...

  6. 沉迷AC自动机无法自拔之:[UVALive 4126] Password Suspects

    图片加载可能有点慢,请跳过题面先看题解,谢谢 一看到这么多模式串就非常兴奋,又是\(AC\)自动机 题目就是要求:经过 \(n\) 个节点,把所有单词都遍历一遍的方案数,和那道题差不多嘛 所以这样设: ...

  7. bzoj 2754 ac自动机

    第一道AC自动机题目. 记一下对AC自动机的理解吧: AC自动机=Trie+KMP.即在Trie上应用KMP思想,实现多Pattern的匹配问题. 复杂度是预处理O(segma len(P)),匹配是 ...

  8. 【bzoj3172】: [Tjoi2013]单词 字符串-AC自动机

    [bzoj3172]: [Tjoi2013]单词 先用所有单词构造一个AC自动机 题目要求的是每个单词在这个AC自动机里匹配到的次数 每次insert一个单词的时候把路径上的cnt++ 那么点p-&g ...

  9. AC自动机题单

    AC自动机题目 真的超级感谢xzy 真的帮到我很多 题单 [X] [luogu3808][模板]AC自动机(简单版) https://www.luogu.org/problemnew/show/P38 ...

随机推荐

  1. Thread IsBcakgroud

    C#中,Thread类有一个IsBackground 的属性.MSDN上对它的解释是:获取或设置一个值,该值指示某个线程是否为后台线程.个人感觉这样的解释等于没有解释. .Net中的线程,可以分为后台 ...

  2. 大开眼界 游览Facebook香港办公室

    想加入Facebook 的话不一定要跑去美国,Facebook在香港也开了一个很赞的办公室.除了无敌海景外,更可享用按摩椅.乒乓球桌.跑步机.麻将桌.酒廊.育婴室及开放式厨房.

  3. objective-c strong导致内存泄漏简单案例

    例如: @interface Test:NSObject{ id __strong obj_; } -(void) setObject:(id __strong)obj; @end @implemen ...

  4. Iterator之java.util.ConcurrentModificationException

    在运行以下代码时,会报java.util.ConcurrentModificationException异常, public class Demo { public static void main( ...

  5. 在windows 、linux下读取目录下所有文件名

    Windows要引入的头文件是<Windows.h> 主要是两个函数FindFirstFile.FindNextFile MSDN里是这么说的: FindFirstFile functio ...

  6. Mac OS X中配置Apache

    我使用的Mac OS X版本是10.8.2,Mac自带了Apache环境. 启动Apache 设置虚拟主机 启动Apache 打开“终端(terminal)”,输入 sudo apachectl -v ...

  7. 15、SQL基础整理(视图)

    视图 即虚拟表 系统-右键-新建视图 编辑前200行 select *from studentscore 代码创建法: create view studentscore as select stude ...

  8. Unity3D ShaderLab 自定义光照模型

    接着上一篇BasicMyDiffuse的代码来说,这次要说明的就是自定义的光照模型,Ctrl+D>BasicMyDiffuse. 1.>//#pragma surface surf Lam ...

  9. 如何实现Magento产品批量导入?

    从事外贸的我们在工作中,经常需要添加成千上万个的产品,如果一个一个的去上传,要花费很多时间,有是很让人头痛,那么应该如何实现产品批量上传?如果使用的是Magento系统的话,那么你现在有福利了,因为M ...

  10. asp.net MVC 常见安全问题及解决方案

    asp.net MVC 常见安全问题及解决方案 一.CSRF (Cross-site request forgery跨站请求伪造,也被称为“one click attack”或者session rid ...