• Luogu P4398 [JSOI2008]Blue Mary的战役地图 矩阵哈希


    其实可以二分矩阵边长但是我太懒了$qwq$。

    把每个子矩阵扔到$map$里,然后就没了

    #include<cstdio>
    #include<map>
    #include<iostream>
    #define ull unsigned long long
    #define R register int
    using namespace std;
    inline int g() {
        R ret=0,fix=1; register char ch; while(!isdigit(ch=getchar())) fix=ch=='-'?-1:fix;
        do ret=ret*10+(ch^48); while(isdigit(ch=getchar())); return ret*fix;
    } const int B=11,B2=13,N=51;
    map<ull,bool> mp;
    int n;
    ull p[N],p2[N],a[N][N];
    inline ull calc(int x,int y,int l) {return a[x][y]-a[x-l][y]*p2[l]-a[x][y-l]*p[l]+a[x-l][y-l]*p[l]*p2[l];}
    signed main() {
        n=g(); p[0]=p2[0]=1; for(R i=1;i<=n;++i) p[i]=p[i-1]*B; for(R i=1;i<=n;++i) p2[i]=p2[i-1]*B2;
        for(R i=1;i<=n;++i) for(R j=1;j<=n;++j) a[i][j]=g();
        for(R i=1;i<=n;++i) for(R j=1;j<=n;++j) a[i][j]=a[i][j-1]*B+a[i][j];
        for(R i=1;i<=n;++i) for(R j=1;j<=n;++j) a[i][j]=a[i-1][j]*B2+a[i][j];
        for(R l=0;l<n;++l) for(R i=l;i<=n;++i) for(R j=l;j<=n;++j) mp[calc(i,j,l)]=true;
        for(R i=1;i<=n;++i) for(R j=1;j<=n;++j) a[i][j]=g();
        for(R i=1;i<=n;++i) for(R j=1;j<=n;++j) a[i][j]=a[i][j-1]*B+a[i][j];
        for(R i=1;i<=n;++i) for(R j=1;j<=n;++j) a[i][j]=a[i-1][j]*B2+a[i][j];
        for(R l=n;l;--l) for(R i=l;i<=n;++i) for(R j=l;j<=n;++j) if(mp.find(calc(i,j,l))!=mp.end()) {printf("%d
    ",l); return 0;}
    }

    2019.07.11

  • 相关阅读:
    JTable使用
    VirtualBox 虚拟机安装
    ICONIX简介
    反射在Java Swing编程中的应用之java 模仿.net事件处理
    【Ubuntu】UBUNTU中如何获得root权限
    html头部代码【转载】
    eclipse code templates 设置
    include与jsp:include区别【转载】
    银行卡
    【AJAX】DWR入门教程
  • 原文地址:https://www.cnblogs.com/Jackpei/p/11170753.html
Copyright © 2020-2023  润新知