首页 > 代码库 > URAL 1486(二维字符串hash)
URAL 1486(二维字符串hash)
题意:一个最大500*500的字符矩阵,求最大的两个相同的字符正方形。正方形可以有重叠部分但不能重合。
解法:首先是二分正方形的长度,然后判断某个长度存在时候计算字符矩阵的二维hash值,二维hash的方法是:
这样子拓展的hash算法可以O(1) 获取任意一个子矩阵的hash值。
代码:
/****************************************************** * @author:xiefubao *******************************************************/ #pragma comment(linker, "/STACK:102400000,102400000") #include <iostream> #include <cstring> #include <cstdlib> #include <cstdio> #include <queue> #include <vector> #include <algorithm> #include <cmath> #include <map> #include <set> #include <stack> #include <string.h> //freopen ("in.txt" , "r" , stdin); using namespace std; #define eps 1e-8 #define zero(_) (abs(_)<=eps) const double pi=acos(-1.0); typedef unsigned long long LL; const int Max=502; const LL INF=100007; char s[Max][Max]; LL hash[Max][Max]; LL hash2[Max][Max]; LL scale[Max]; LL scale2[Max]; LL seed=3131; LL seed2=1313; int n,m; int count1=0; struct edge { LL data; int next; int x,y; } edges[Max*Max]; int head[100010]; int tot=0; void add(LL u,LL data,int x,int y) { edges[tot].data=http://www.mamicode.com/data;>URAL 1486(二维字符串hash)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。