博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ZOJ 2975 思维
阅读量:6909 次
发布时间:2019-06-27

本文共 972 字,大约阅读时间需要 3 分钟。

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

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

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

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

#include
#include
#include
#include
#include
#include
using namespace std;int n,m;char a[300][300];int main(){ int t; scanf("%d",&t); while(t--) { map
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\n",sum); }}

  

转载于:https://www.cnblogs.com/rayrayrainrain/p/5399661.html

你可能感兴趣的文章
深入浅出Future Pattern
查看>>
微信公众平台企业号回调模式的URL验证
查看>>
平台常用函数介绍
查看>>
公司讲座
查看>>
惆怅,诸事不顺
查看>>
Lambda架构与推荐在电商网站实践
查看>>
Docker Swarm与Apache Mesos的区别
查看>>
消息中间件保证消息一致性解决方案
查看>>
java内嵌浏览器DJNativeSwing
查看>>
Php学习
查看>>
寓意很深刻的故事
查看>>
Confluence 6 权限概述
查看>>
Android小白的探索:2D绘图之Android简易版Microsoft Visio学习之路 三、装饰者模式...
查看>>
现代操作系统--引论
查看>>
Unix Study之--AIX安装和配置SSH
查看>>
C++ priority_queue用法(大顶堆,小顶堆)
查看>>
带返回值的python多级菜单
查看>>
Linux中~/.是什么意思
查看>>
MySql-Binlog协议详解-流程篇
查看>>
Effective Java 学习笔记(第57条:只针对异常的情况才使用异常)
查看>>