• ZOJ 2975 思维


    题意 给出一个矩形 问在其中存在多少子矩形 其四个角上的字母是一样的 

    一开始暴力写了一发 先枚举行数 再枚举两个列数 再向下枚举行数 判断能否 没有意外的超时了

    后来想了想 当我们已经确定两个列数的时候 向下寻找的时候 如果找到了tot条边与第一条边同字母 这些边可以组成(tot-1)*tot个矩形 使满足题意

    为了避免重复寻找 需要一个map来记录 由于矩形的边最长100 我们存已经检索的字母*1000*1000+左列数*1000+右列数

    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    #include<iostream>
    #include<string>
    #include<map>
    using namespace std;
    int n,m;
    char a[300][300];
    int main(){
        int t;
        scanf("%d",&t);
        while(t--)
        {
            map<int ,int >q;
            q.clear();
            int sum=0;
            scanf("%d%d",&n,&m);
            for(int i=1;i<=n;i++)
            scanf("%s",a[i]+1);
            for(int i=1;i<=n-1;i++)
            {
                for(int k=1;k<=m-1;k++)
                {
                    for(int j=k+1;j<=m;j++)
                    {
                        if(a[i][k]!=a[i][j])
                        continue;
                        int x=a[i][k]-'A';
                        if(q[x*1000000+k*1000+j]!=0)
                        continue;
                        int tot=1;
                        for(int l=i+1;l<=n;l++)
                        {
                            if(a[l][j]==a[l][k]&&a[l][j]==a[i][j])
                            {
                                tot++;
                                q[x*1000000+k*1000+j]=1;
                            }
                        }
                        sum+=(tot-1)*tot/2;
                    }
                }
            }
            printf("%d
    ",sum);
        }
    }
    

      

  • 相关阅读:
    拦截器接口(IActionFilter,IExceptionFilter,IResultFilter,IAuthorizationFilter)
    Linq学习
    keycode值大全
    C#使用Cookie方法
    领域驱动设计学习
    mvc3 razor语法学习
    O/R Mapping 阻抗失衡
    文档格式批量转换(doc,txt,pdf等)
    统计sql语句
    如何确定文件编码格式的方法??
  • 原文地址:https://www.cnblogs.com/rayrayrainrain/p/5399661.html
Copyright © 2020-2023  润新知