zoukankan      html  css  js  c++  java
  • Sudoku Subrectangles

    #include<bits/stdc++.h>
    #define inf 1e18
    #define ll long long 
    #define ull unsigned long long 
    #define int long long
    #define PI acos(-1.0)
    #define PII pair<int,int>
    using namespace std;
    const int N =2e3+7 , M = 1e6+7;
    const int mod = 1e9+7;
    char s[N][N];
    int r[N][N],d[N][N],re[N],n,m;
    void solve(){
        scanf("%lld%lld",&n,&m);
        for(int i=1;i<=n;++i){
            scanf("%s",s[i]+1);
        }/*
        for(int i=1;i<=n;++i){
            printf("%s
    ",s[i]+1);
        }*/
        map<char,int>las;
        for(int i=1;i<=n;++i){
            las.clear();
            for(int j=m;j>=1;--j){
                if(j==m){
                    r[i][j]=m;
                }
                else{
                    if(las[s[i][j]])r[i][j]=min(r[i][j+1],las[s[i][j]]-1);
                    else            r[i][j]=r[i][j+1];
                }
                las[s[i][j]]=j;
            }
        }
        for(int j=1;j<=m;++j){
            las.clear();
            for(int i=n;i>=1;--i){
                if(i==n){
                    d[i][j]=n;
                }
                else{
                    if(las[s[i][j]])d[i][j]=min(d[i+1][j],las[s[i][j]]-1);
                    else            d[i][j]=d[i+1][j];
                }
                las[s[i][j]]=i;
            }
        }
        int ans=0;
        for(int i=1;i<=n;++i){
            for(int j=1;j<=m;++j){
                int minn = d[i][j];
                for(int k = j; k<= r[i][j];++k){
                    minn=min(minn,d[i][k]);
                    re[k] = minn;
                }
                minn = r[i][j];
                for(int k = i;k <= d[i][j];++k){
                    minn = min(minn, r[k][j]);
                    while(re[minn] +1 <= k) --minn;
                    ans += minn-j+1;
                }
            }
        }
        printf("%lld
    ",ans);
    }
    signed main(){
        int t=1;
    //    scanf("%lld",&t);
        while(t--){
            solve();
        }
        return 0;
    }
  • 相关阅读:
    IEnumerable、IEnumerator接口(如何增加迭代器功能)
    IConvertible接口
    IComparable和IComparer接口
    c#-泛型、协变、逆变
    MVC-HtmlHelper扩展
    .Net反射-TypeDescriptor
    MVC Core 使用TagHelper扩展几个插件
    js日志组件封装
    js预解析
    js代码优化
  • 原文地址:https://www.cnblogs.com/PdrEam/p/15376885.html
Copyright © 2011-2022 走看看