AC自动机的灵活运用,本题关键是灵活二字。
因为数据不是很大,时间要求也不高的缘故,所以本题有人使用暴力法也过了,有人使用Trie也过了。
当然有人使用AC自动机没AC的,在讨论区里喊AC自动机超时的,那是因为不会灵活运用,或者是硬套模板的,AC了速度也不会快。
给出本人的算法思路:
1 把需要查找的关键字建立Trie, 然后构造AC自动机
2 查找的时候分八个方向查找,比如棋盘...
分类:
其他好文 时间:
2014-08-07 15:41:50
阅读次数:
314
链接:http://poj.org/problem?id=3233
题意:给一个N*N的矩阵(N,求S = A + A^2 + A^3 +
… + A^k(k
思路:很明显直接用矩阵快速幂暴力求和的方法复杂度O(klogk),肯定会超时,我采用的是二分的方法, A + A^2 + A^3 +
… + A^k=(1+A^(k/2)) *(A + A^2 + A^3 +
… + A^(...
分类:
其他好文 时间:
2014-08-07 13:25:40
阅读次数:
266
本题要求求一组字符串的最长公共子串,其实是灵活运用KMP快速求最长前缀。
注意肯爹的题意:要求按照字典顺序输出。
还有要提醒的就是:有人也是用KMP来解这道题,但是很多人都把KMP当成暴力法来用了,没有真正处理好细节,发挥KMP的作用。而通常这些人都大喊什么暴力法可以解决本题,没错,的确暴力法是可以解决本题的,本题的数据不大,但是请不要把KMP挂上去,然后写成暴力法了,那样会误导多少后来人啊。...
分类:
其他好文 时间:
2014-08-06 23:12:42
阅读次数:
375
题目:uva10911 - Forming Quiz Teams(记忆化搜索)
题目大意:给出N对点的坐标,然后将这2 * N个点分组,Xi代表第i组的点之间的距离,求sum(Xi)最小值。
解题思路:这里的点最多16个,如果暴力求解的话16!,会超时的。这里的点取和不取可以用0和1表示,这样的话所有的状态可以用二进制数X来表示。dp【X】 = Min (dp【newx】 +...
分类:
其他好文 时间:
2014-08-06 23:10:25
阅读次数:
275
首先要明确一点,当数据规模达到百万时需用O(n)算法如何实现O(n)算法,其实是对原有算法的一种改进后者说是 原有算法+一点小性质=O(n)算法下面我将举几个例子来说明这一点:1.后缀数组中height数组的求法,暴力算法hash+二分 用上height[rank[i]]>=height[rank[...
分类:
其他好文 时间:
2014-08-06 22:08:02
阅读次数:
186
问题:找出某个元素的位置朴素的暴力方法class Solution {public: int search(int A[], int n, int target) { int i; for(i=0;i<n;i++) { if(A[...
分类:
其他好文 时间:
2014-08-06 21:45:42
阅读次数:
196
HDU 1505,1506的变形 只是由求面积变成了求周长 具体分析可见http://blog.csdn.net/iooden/article/details/38379065
另外这题数据比较小 也可以暴力枚举 枚举每点作为左上角 然后枚举合法的的长和宽, 判断形成的的矩阵是否全由 '0'组成, 如果是就更新结果...
分类:
其他好文 时间:
2014-08-06 02:04:10
阅读次数:
334
题意:输入 语言A及翻译为语言B的词典,之后再输入语言B的单词,判断是否能从词典中找到,
若能找到,将其翻译为语言A,否则输出“eh”.
思路:这题肯定得先将词典对应语言存起来,但是如果直接暴力找输入的单词是否出现过,必然会TLE
因为单词都是一对一的关系,可以用map实现
当然,trie树是用空间换时间,对于字符串的查找,在时间上有着相当的优势,因此也可以用trie树
注:sscanf函数,从一个字符串中读进与指定格式相符的数据....
分类:
其他好文 时间:
2014-08-05 19:26:00
阅读次数:
232
lca。。。
排个序然后暴力保平安
_(:зゝ∠)_
#pragma comment(linker, "/STACK:102400000,102400000")
#include"cstdio"
#include"iostream"
#include"set"
#include"queue"
#include"string.h"
using namespace std;
#define...
分类:
其他好文 时间:
2014-08-05 19:25:00
阅读次数:
299
暴力啊,不要想太多
T^T g艹太坑爹了
#include
#include
#include
using namespace std;
const int MAX_N = 807;
int n;
int a[MAX_N][MAX_N], b[MAX_N][MAX_N];
int c[MAX_N][MAX_N];
int main() {
while (1 == scan...
分类:
其他好文 时间:
2014-08-05 19:24:11
阅读次数:
251