题目描述

分别枚举两个矩阵?那样n^6太要命了。

可以枚举两个矩形的交点
将交点看成原点,可以将整个区域分成四个象限,1与3对应,2与4对应
再枚举相对应的象限计算可以获得的利益,用hash判重

可枚举不同的象限时还要把hash清零,n^2次的memset就超时了。。。

那怎么继续优化呢?

可以用一个栈记录hash里增加的值,只把这些值清零就好了。

#include<complex>
#include<cstdio>
using namespace std;
const int N=,M=1e6+;
int n,ans,top;
int st[N*N],sum[N][N],Hash[M<<];
int main()
{
scanf("%d",&n);
int a;
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
{
scanf("%d",&a);
sum[i][j]=sum[i-][j]+sum[i][j-]-sum[i-][j-]+a;
}
int tmp;
for(int i=;i<=n-;i++)
for(int j=;j<=n-;j++)
{
for(int k=;k<=i;k++)
for(int l=;l<=j;l++)
{
tmp=sum[i][j]-sum[k-][j]-sum[i][l-]+sum[k-][l-]+M;//可能会有负数,所以都加M变为正数
st[++top]=tmp;
Hash[tmp]++;
}
for(int k=i+;k<=n;k++)
for(int l=j+;l<=n;l++)
{
tmp=sum[i][j]-sum[k][j]-sum[i][l]+sum[k][l]+M;
ans+=Hash[tmp];
}
while(top)Hash[st[top--]]=;
for(int k=i+;k<=n;k++)
for(int l=;l<=j;l++)
{
tmp=sum[i][l-]-sum[k][l-]-sum[i][j]+sum[k][j]+M;
st[++top]=tmp;
Hash[tmp]++;
}
for(int k=;k<=i;k++)
for(int l=j+;l<=n;l++)
{
tmp=sum[i][l]-sum[k-][l]-sum[i][j]+sum[k-][j]+M;
ans+=Hash[tmp];
}
while(top)Hash[st[top--]]=;
}
printf("%d\n",ans);
return ;
}

洛谷 P2363 马农的更多相关文章

  1. DP【洛谷P2363】马农

    [洛谷P2363]马农 题目描述 在观看完战马检阅之后,来自大草原的两兄弟决心成为超级"马农",专门饲养战马. 兄弟两回到草原,将可以养马的区域,分为N*N的单位面积的正方形,并实 ...

  2. 【bfs】洛谷 P1443 马的遍历

    题目:P1443 马的遍历 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 记录一下第一道ac的bfs,原理是利用队列queue记录下一层的所有点,然后一层一层遍历: 其中: 1.p ...

  3. 洛谷P1443 马的遍历

    https://www.luogu.org/problemnew/show/P1443 很经典的搜索题了,蒟蒻用广搜打的 不说了,上代码! #include<bits/stdc++.h> ...

  4. 洛谷P1443马的遍历

    传送 这是个广搜,思路和普通的迷宫题差不多,但我卡了3遍,为什么呢? 因为输出格式 题目要求左对齐,宽度为5输出,在此说一下如何控制宽度. 下面的m都为要求的宽度 int 类型: printf: %m ...

  5. 洛谷1443 马的遍历【bfs】

    题目链接:https://www.luogu.org/problemnew/show/P1443 题意: 给一个n*m的棋盘,马在上面走(规则就是象棋中的规则,详细见代码dx,dy数组定义) 问棋盘上 ...

  6. 洛谷P1443 马的遍历(bfs,注意输出格式)

    题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数据,棋盘的大小和马的坐标 输出 ...

  7. 洛谷P1443 马的遍历【BFS】

    题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数据,棋盘的大小和马的坐标 输出 ...

  8. 洛谷 P1443 马的遍历

    P1443 马的遍历 题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数据,棋盘 ...

  9. 洛谷——P1443 马的遍历

    https://www.luogu.org/problem/show?pid=1443#sub 题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达 ...

随机推荐

  1. mysql_select 单表查询

    select *         *代表全部   查询多个字段 select  字段1,字段2,字段3   聚合函数  count(*)       统计 select count(*)       ...

  2. java之hibernate之helloworld

    这篇文章,会一步一步的演示hibernate的使用. 目录结构如下: 1.新建java项目 2.增加一个lib文件夹,并把 hibernate必须的jar包 和 数据库驱动包 一起复制进去 然后把hi ...

  3. SharePoint中用Power shell命令设置文档库列表的权限

    首先停止继承权限 $web = Get-PnPweb $spoList= Get-PnPList "Testlist" -Web $web (注释:获取对象)$spoList.Br ...

  4. css文字的渐变色设置

      background-image: -webkit-linear-gradient( ); //设置颜色与渐变方向   -webkit-background-clip: text; //主要用于剪 ...

  5. Django:ORM介绍

    1.ORM概念 ​ 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. ​ 简单的说,ORM是通过使用描述 ...

  6. 写Shell脚本自动生成首行

    送给经常写shell脚本的兄弟们常写shell脚本的时候,大家一定都有困扰,怎么样能让.sh文件的表头自己生成,不用我们自己去敲呢 首先我们要编写一下/etc/vimrc执行 vim /etc/vim ...

  7. Python——结束语句

    条件语句: break 结束语句,表示达到某个目的后,将结束当前循环语句,break以下的代码都不执行.例如: for i in range(10): print("--------&quo ...

  8. 【转】CCS5.5从硬盘读入.dat数据格式的单张图像

    首页 博客 学院 CSDN学院                            下载 论坛 APP CSDN                            问答 商城 活动 VIP会员 ...

  9. 分布式结构化存储系统-Kudu简介

    分布式结构化存储系统-Kudu简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Hadoop生态系统发展到现在,存储层主要由HDFS和HBase两个系统把持着,一直没有太大突破. ...

  10. ISCC之msc5他们能在一起吗?

    如题,开始分析,附件是一个二维码,读出来一串base64 拿去解密,PASS{0K_I_L0V3_Y0u!} 提交几次不对, 继续hxd分析图片,最后在文件末尾发现一个txt 修改后缀,是加密的, 拿 ...