javaee论坛

普通会员

225648

帖子

345

回复

359

积分

楼主
发表于 2019-11-01 17:36:28 | 查看: 97 | 回复: 3

题目链接:传送门

二维哈希枚举边长和两个正方形的两个端点复杂度不满n5n^5n5好吧差不多刚好卡过去

#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>#include<complex>#include<algorithm>#include<climits>#include<queue>#include<map>#include<set>#include<vector>#include<iomanip>#defineA51#defineB2010usingnamespacestd;typedeflonglongll;constintbase1=13;constintbase2=19;intn,a[A][A],b[A][A],ans;llha[A][A],hb[A][A];llf1[A]={1},f2[A]={1};intmain(intargc,charconst*argv[]){cin>>n;for(inti=1;i<51;i++)f1[i]=f1[i-1]*base1,f2[i]=f2[i-1]*base2;for(inti=1;i<=n;i++)for(intj=1;j<=n;j++)scanf("%d",&a[i][j]),ha[i][j]=a[i][j]+ha[i-1][j]*base1;for(inti=1;i<=n;i++)for(intj=1;j<=n;j++)ha[i][j]+=ha[i][j-1]*base2;for(inti=1;i<=n;i++)for(intj=1;j<=n;j++)scanf("%d",&b[i][j]),hb[i][j]=b[i][j]+hb[i-1][j]*base1;for(inti=1;i<=n;i++)for(intj=1;j<=n;j++)hb[i][j]+=hb[i][j-1]*base2;for(intlen=1;len<n;len++)for(inti=len;i<=n;i++)for(intj=len;j<=n;j++)for(intt=len;t<=n;t++)for(into=len;o<=n;o++){if(a[i][j]!=b[t][o])continue;llhasha=ha[i][j]-ha[i-len][j]*f1[len]-ha[i][j-len]*f2[len]+ha[i-len][j-len]*f1[len]*f2[len];llhashb=hb[t][o]-hb[t-len][o]*f1[len]-hb[t][o-len]*f2[len]+hb[t-len][o-len]*f1[len]*f2[len];if(hasha==hashb)ans=max(ans,len);}cout<<ans<<endl;}

普通会员

0

帖子

306

回复

307

积分
沙发
发表于 2021-05-05 05:35:50

围观

普通会员

0

帖子

306

回复

343

积分
板凳
发表于 2024-01-30 03:54:43

如果这就是爱,再转身的时候就该留下

普通会员

4

帖子

347

回复

369

积分
地板
发表于 2024-04-26 20:08:01

标记一下

您需要登录后才可以回帖 登录 | 立即注册

触屏版| 电脑版

技术支持 历史网 V2.0 © 2016-2017