写了好久,不知道为什么不过,也不清楚到底卡在哪里。。。

只好看别人的代码,感觉除了HASH不一样外,倒没什么特别之处。同时参考那论文写的。。

http://blog.csdn.net/jyysc2010/article/details/9964513

 #include<stdio.h>
#include<cstring>
#include<cstdlib>
#define Min(a,b) (a<b?a:b)
struct node
{
int x,y;
} hash[],a1,a2;
int p=;
int n,m,f[][],ans,x1,x2,y1,y2,a[][],g[][],b[],next[],start[],tot;
long long s[]; void insert(int x,node t)//将HASH值x插入链表
{
hash[++tot]=t;
next[tot]=start[x];
start[x]=tot;
} bool cmp(int x,int l)//比较HASH值为X的相同矩阵是否出现过
{
int i,j;
for (int g=start[x]; g; g=next[g])
{
a2=hash[g];
j=l;
for (i=; i<l&&j>=l; i++)
if (f[a1.x][a1.y-i]!=f[a2.x][a2.y-i]) break;
if (i>=l)
{
if (l>ans) ans=l,x1=a1.x,y1=a1.y,x2=a2.x,y2=a2.y;
return true;
}
}
return false;
} int main()
{
int i,j,k,l,r;
char c;
scanf("%d%d%*c",&n,&m);
for (i=; i<=n; i++)
{
for (j=; j<=m; j++)
{
scanf("%c",&a[i][j]);
a[i][j]-=;
}
scanf("%*c");
}
s[]=;
for (i=; i<=n; i++) s[i]=(p*s[i-])&; r=Min(n,m);
l=;
while (l<=r)
{
k=l+r>>;
for (i=; i<=n; i++)
for (j=; j<=m; j++)
{
if (i<k) f[i][j]=f[i-][j]*p+a[i][j]&;
else f[i][j]=((f[i-][j]-a[i-k][j]*s[k-]&)+&)*p+a[i][j]&;//减去最高位,加上最低位 }//f[i][j]存下第j列第i行往上长度为k的串的HASH值
memset(start,,sizeof(start));
tot=;
for (j=; j<=m&&i>n; j++)
for (i=k; i<=n; i++)
{
if (j<k) g[i][j]=g[i][j-]*p+f[i][j]&;
else
{
g[i][j]=((g[i][j-]-f[i][j-k]*s[k-]&)+&)*p+f[i][j]&;
if (cmp(g[a1.x=i][a1.y=j],k)) break;
insert(g[i][j],a1);
}
}//g[i][j]存下右下角为第i行第j列长度为k的矩阵的HASH值
if (j<=m) l=k+;
else r=k-; }
if (ans) printf("%d\n%d %d\n%d %d\n",ans,x1-ans+,y1-ans+,x2-ans+,y2-ans+);
else printf("0\n");
return ;
}

ural 1468的更多相关文章

  1. BZOJ 1468: Tree

    Description 真·树,问距离不大于 \(k\) 的点对个数. Sol 点分治. 同上. Code /********************************************* ...

  2. 后缀数组 POJ 3974 Palindrome && URAL 1297 Palindrome

    题目链接 题意:求给定的字符串的最长回文子串 分析:做法是构造一个新的字符串是原字符串+反转后的原字符串(这样方便求两边回文的后缀的最长前缀),即newS = S + '$' + revS,枚举回文串 ...

  3. ural 2071. Juice Cocktails

    2071. Juice Cocktails Time limit: 1.0 secondMemory limit: 64 MB Once n Denchiks come to the bar and ...

  4. ural 2073. Log Files

    2073. Log Files Time limit: 1.0 secondMemory limit: 64 MB Nikolay has decided to become the best pro ...

  5. ural 2070. Interesting Numbers

    2070. Interesting Numbers Time limit: 2.0 secondMemory limit: 64 MB Nikolay and Asya investigate int ...

  6. ural 2069. Hard Rock

    2069. Hard Rock Time limit: 1.0 secondMemory limit: 64 MB Ilya is a frontman of the most famous rock ...

  7. ural 2068. Game of Nuts

    2068. Game of Nuts Time limit: 1.0 secondMemory limit: 64 MB The war for Westeros is still in proces ...

  8. ural 2067. Friends and Berries

    2067. Friends and Berries Time limit: 2.0 secondMemory limit: 64 MB There is a group of n children. ...

  9. ural 2066. Simple Expression

    2066. Simple Expression Time limit: 1.0 secondMemory limit: 64 MB You probably know that Alex is a v ...

随机推荐

  1. Canvas和SVG的基础知识,以及两者的区别(小白)

    首先我们来说一下Canvas是什么,它有什么作用以及它的知识点. Canvas是<HTML5>的新标签,它通常用于通过脚本(也就是JavaScript)来绘制图像.但是它本身并没有绘制能力 ...

  2. redis过期策略和内存淘汰机制

    目录 常见的删除策略 redis使用的过期策略:定期删除+惰性删除 定期删除 惰性删除 为什么要采用定期删除+惰性删除2种策略呢? redis内存淘汰机制 常见的删除策略 1.定时删除:在设置键的过期 ...

  3. PHP电影小爬虫(2)

    学习了别人的爬虫后自己改的一个,算是又回顾了一下php的使用 我们来利用simple_html_dom的采集数据实例,这是一个PHP的库,上手很容易.simple_html_dom 可以很好的帮助我们 ...

  4. VMware 14 Pro 永久许可证激活密钥

    VMware 14 Pro 永久许可证激活密钥 FF31K-AHZD1-H8ETZ-8WWEZ-WUUVACV7T2-6WY5Q-48EWP-ZXY7X-QGUWD

  5. [Android]异常6-TextView setText延迟显示

    背景:Thread和Handler显示数据到界面 解决办法有: 解决一>界面使用了ListView.GridView等,把高度和宽度调整为固定值或者match_parent 解决二>某处U ...

  6. 认识 java JVM虚拟机选项 Xms Xmx PermSize MaxPermSize 区别

    点击window---->preferences---->配置的tomcat---->JDK,在Optional Java VM arguments:中输入 -Xmx512M -Xm ...

  7. 在CentOS6,CentOS7安装 Let'sEncrypt 免费SSL安全证书

    相对来说,个人网站建立SSL是昂贵的,而且往往过程繁琐.一个标准的2048位证书费用至少150美元/年,网站除了要支付一笔昂贵的费用.重新配置Web服务器,并需要解决大量的配置错误.这让广大中小网站望 ...

  8. [ECharts]"echarts/config" is not exists

    今天在给Echarts折线图中的数据点增加点击事件的时候总是出现一个 Uncaught Error: [MODULE_MISS]"echarts/config" is not ex ...

  9. MFC TAB控件顺序

    在MFC中添加控件后,按Ctrl+d可以改变控件TAB顺序,怕自己忘了,一个神奇的东西,记下. 关于改变Tab顺序的方法有以下几种: 方法一:在动态创建控件的时候STYLE设置成为WS_CHILD|W ...

  10. linux中集群的免秘钥SSH直接登录

    这里以三台mysql的主从服务器为例:manage.master.slave1.slave2   给4个机器生成秘钥文件 以manage为例,执行命令,生成空字符串的秘钥(后面要使用公钥),命令是: ...