洛谷 P2363 马农
分别枚举两个矩阵?那样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 马农的更多相关文章
- DP【洛谷P2363】马农
[洛谷P2363]马农 题目描述 在观看完战马检阅之后,来自大草原的两兄弟决心成为超级"马农",专门饲养战马. 兄弟两回到草原,将可以养马的区域,分为N*N的单位面积的正方形,并实 ...
- 【bfs】洛谷 P1443 马的遍历
题目:P1443 马的遍历 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 记录一下第一道ac的bfs,原理是利用队列queue记录下一层的所有点,然后一层一层遍历: 其中: 1.p ...
- 洛谷P1443 马的遍历
https://www.luogu.org/problemnew/show/P1443 很经典的搜索题了,蒟蒻用广搜打的 不说了,上代码! #include<bits/stdc++.h> ...
- 洛谷P1443马的遍历
传送 这是个广搜,思路和普通的迷宫题差不多,但我卡了3遍,为什么呢? 因为输出格式 题目要求左对齐,宽度为5输出,在此说一下如何控制宽度. 下面的m都为要求的宽度 int 类型: printf: %m ...
- 洛谷1443 马的遍历【bfs】
题目链接:https://www.luogu.org/problemnew/show/P1443 题意: 给一个n*m的棋盘,马在上面走(规则就是象棋中的规则,详细见代码dx,dy数组定义) 问棋盘上 ...
- 洛谷P1443 马的遍历(bfs,注意输出格式)
题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数据,棋盘的大小和马的坐标 输出 ...
- 洛谷P1443 马的遍历【BFS】
题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数据,棋盘的大小和马的坐标 输出 ...
- 洛谷 P1443 马的遍历
P1443 马的遍历 题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意一个点最少要走几步 输入输出格式 输入格式: 一行四个数据,棋盘 ...
- 洛谷——P1443 马的遍历
https://www.luogu.org/problem/show?pid=1443#sub 题目描述 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达 ...
随机推荐
- TweenMax参数用法中文介绍
TweenMax 建立在 TweenLite 和 TweenFilterLite 基础之上,因此,又揉合了这二者的功能,使得功能更加的齐备,但是如果说易用性,觉得还是 TweenLite 来得方便一些 ...
- tkinter学习笔记_01
知识点目录: 1. 文本框 Label var = tk.StringVar() # 文本框 bg 背景颜色 fonnt 字体设置 width 长 height 高 l = tk.Label(root ...
- Tkinter & mysql 的登录框练习
import tkinter as tk from tkinter import messagebox import pymysql class SignIn(object): def __init_ ...
- 【转】Redis 基础操作和命令
笔记 Redis提供了六种基本的数据结构:String,Hash,List,Set,Sorted Set,HyperLogLog. Redis的特点:纯内存操作,单线程工作模型,非阻塞I/O多路复用. ...
- (转)数据库函数解析JSON字符串
一.返回单行单列 二.返回表 三.SQL206版本开始支持 SELECT * FROM OPENJSON(@JsonStr)
- DevExtreme学习笔记(一) DataGrid中数据提交注意事项
1.数据提交的{}数据需转化json格式 syncPost('/controller/action', { values: JSON.stringify({d:x}) }, function (res ...
- bootstrap-datetimepicker 日期控件起始时间和结束时间
项目中经常会用到起止时间,如下图: 需要引用以下几个文件: <link href="~/lib/bootstrap/dist/css/bootstrap.min.css" r ...
- 5_PHP数组_3_数组处理函数及其应用_1_快速创建数组的函数
以下为学习孔祥盛主编的<PHP编程基础与实例教程>(第二版)所做的笔记. 一.快速创建数组的函数 1. range() 函数 程序: <?php $numbers = range(1 ...
- spring boot 使用GraphQL
在此之前需要简单了解GraphQL的基本知识,可通过以下来源进行学习 GraphQL官方中文网站 :https://graphql.cn GraphQL-java 官网:https://www.gra ...
- SAP NOTE 1999997 - FAQ: SAP HANA Memory
Symptom You have questions related to the SAP HANA memory. You experience a high memory utilization ...