IT民工
加油!
摘要: 第一次写AC自动机,参考集训手册题解的代码,但是还是花了三个小时的时间才A掉。字符串插入字典树的过程就是一般字典树形成的过程。这里关键在于求失败指针。有点像KMP求next的过程。 对于每个结点,我们可以这样处理:设这个结点上的字母为C,沿着他父亲的失败指针走,直到走到一个结点,他的儿子中也有字母为C的节点。然后把当前结点的失败指针指向那个字母也为C的结点。如果一直走到了root都没找到,那就把失败指针指向root。最开始,我们把root加入队列(root的失败指针显然指向自己),这以后我们每处理一个结点,就将他的所有儿子几点入队。 假设有一个节点k,他的失败指针指向j。那么k,j满足... 阅读全文
posted @ 2012-08-03 15:32 找回失去的 阅读(209) 评论(0) 推荐(0) 编辑
摘要: 和POJ1509没什么区别,只是输入形式上有些许改变,而且这里要求输出的位置是字符串的下标,而不用再加1。/*Accepted 1729 C++ 10ms 276kb Yu*/#include<stdio.h>#include<string.h>#include<stdlib.h>#include<algorithm>using namespace std;const int MAXN = 100100;char s[MAXN];int n, T;int Minpre(){ int i = 0, j = 1, k = 0, x, y; w... 阅读全文
posted @ 2012-08-03 10:05 找回失去的 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 这道题是求字符串最小表示的第一个字符在字符串中的位置。做之前看了IOI2003冬令营周源大神的论文《浅析“最小表示法”思想在字符串循环同构问题中的应用》。这里虽然每个样例只有一个字符串,但是我们可以构造出一个字符串s+1,和s来找同构,然后取找到的位置i,j之中小的那个。/*Accepted 100K 16MS C++ 700B 2012-08-03 09:39:45*/#include<stdio.h>#include<string.h>#include<stdlib.h>#include<algorithm>using namespace s 阅读全文
posted @ 2012-08-03 09:45 找回失去的 阅读(257) 评论(0) 推荐(0) 编辑
摘要: 按照字符串的逆序排序。/*Accepted 100K 16MS C++ 863B 2012-08-03 08:30:48*/#include<stdio.h>#include<string.h>#include<stdlib.h>#include<algorithm>using namespace std;const int MAXN = 55, MAXM = 110;struct str{ char s[MAXN]; int r;}t[MAXM];int n, m;bool cmp(str a, str b){ return a.r < 阅读全文
posted @ 2012-08-03 08:38 找回失去的 阅读(145) 评论(0) 推荐(0) 编辑