[Luogu] 金字塔神话
这是出给pj的题ccccc
#include <bits/stdc++.h> #define ll long long
#define INF 2147483647
#define y1 uihaoissa
#define y2 oaioiuwio using namespace std;
const int wx[]= {,,,-},wy[]= {,,-,}; int T,n,m,k,maxh,ltt;
int a[][],sum[][],cal[];
char tow[][][];
bool f[][][];
int cnt[][][];
short pre1[][][],pre2[][][],fl[][][];
bool debug; inline int read() {
int x=;
char ch=getchar();
while(ch<''||ch>'')ch=getchar();
while(ch>=''&&ch<='') {
x=x*+ch-'';
ch=getchar();
}
return x;
} inline int sqr(int x) {
return x*x;
} inline int toedge(int x,int y) {
return min(min(x,y),min(n-x+,m-y+));
} inline int islarge1(int x1,int y1,int y2,int z) {
return pre1[x1][y2][z]-pre1[x1][y1-][z];
} inline int islarge2(int x1,int x2,int y1,int z) {
return pre2[x2][y1][z]-pre2[x1-][y1][z];
} inline int getsum(int x1,int y1,int x2,int y2) {
return sum[x2][y2]-sum[x1-][y2]-sum[x2][y1-]+sum[x1-][y1-];
} int check(int x,int y,int z) {
if (x>) {
int h;
if (cnt[x-][y][z]==-)
switch (tow[x-][y][z]) {
case :
if (fl[x-][y][z]!=z-) {
h=fl[x-][y][z]+;
if (islarge1(x-h,y-h,y+h,z-h)>) return fl[x][y][z]=h,tow[x][y][z]=,cnt[x][y][z]=-,;
}
break;
case :
h=fl[x-][y][z];
if (islarge2(x-h,x+h,y-h,z-h)>) return fl[x][y][z]=h,tow[x][y][z]=,cnt[x][y][z]=-,;
break;
case :
h=fl[x-][y][z];
if (islarge2(x-h,x+h,y+h,z-h)>) return fl[x][y][z]=h,tow[x][y][z]=,cnt[x][y][z]=-,;
break;
case :
h=fl[x-][y][z]-;
if (islarge1(x+h,y-h,y+h,z-h)>) return fl[x][y][z]=h,tow[x][y][z]=,cnt[x][y][z]=-,;
break;
}
}
if (y>) {
int h;
if (cnt[x][y-][z]==-) {
if (fl[x][y][z]==) tow[x][y][z]=;
switch (tow[x][y-][z]) {
case :
h=fl[x][y-][z];
if (islarge1(x-h,y-h,y+h,z-h)>) return fl[x][y][z]=h,tow[x][y][z]=,cnt[x][y][z]=-,;
break;
case :
if (fl[x][y-][z]!=z-) {
h=fl[x][y-][z]+;
if (islarge2(x-h,x+h,y-h,z-h)>) return fl[x][y][z]=h,tow[x][y][z]=,cnt[x][y][z]=-,;
}
break;
case :
h=fl[x][y-][z]-;
if (islarge2(x-h,x+h,y+h,z-h)>) return fl[x][y][z]=h,tow[x][y][z]=,cnt[x][y][z]=-,;
break;
case :
h=fl[x][y-][z];
if (islarge1(x+h,y-h,y+h,z-h)>) return fl[x][y][z]=h,tow[x][y][z]=,cnt[x][y][z]=-,;
break;
}
}
}
if (z>) {
if (cnt[x][y][z-]==-) {
int h=fl[x][y][z-];
switch (tow[x][y][z-]) {
case :
if (islarge1(x-h,y-h,y+h,z-h)>) return fl[x][y][z]=h,tow[x][y][z]=,cnt[x][y][z]=-,;
break;
case :
if (islarge2(x-h,x+h,y-h,z-h)>) return fl[x][y][z]=h,tow[x][y][z]=,cnt[x][y][z]=-,;
break;
case :
if (islarge2(x-h,x+h,y+h,z-h)>) return fl[x][y][z]=h,tow[x][y][z]=,cnt[x][y][z]=-,;
break;
case :
if (islarge1(x+h,y-h,y+h,z-h)>) return fl[x][y][z]=h,tow[x][y][z]=,cnt[x][y][z]=-,;
break;
}
}
}
for (int h=z-; h>=; h--) { //h为中心到该圈的差数
if (cnt[x][y][h+]!=-) break;
if (islarge1(x-h,y-h,y+h,z-h)>) return fl[x][y][z]=h,tow[x][y][z]=,cnt[x][y][z]=-,;
if (islarge2(x-h,x+h,y-h,z-h)>) return fl[x][y][z]=h,tow[x][y][z]=,cnt[x][y][z]=-,;
if (islarge2(x-h,x+h,y+h,z-h)>) return fl[x][y][z]=h,tow[x][y][z]=,cnt[x][y][z]=-,;
if (islarge1(x+h,y-h,y+h,z-h)>) return fl[x][y][z]=h,tow[x][y][z]=,cnt[x][y][z]=-,;
}
int tot=cal[z]-getsum(x-z+,y-z+,x+z-,y+z-);
return tot>k?:(cnt[x][y][z]=tot,);
} int main() {
for (int i=; i<=; i++)
cal[i]=cal[i-]+(*i-)*(*i-);
T=read();
while (T--) {
maxh=;
memset(cnt,-,sizeof(cnt));
n=read(),m=read(),k=read();
for (int i=; i<=n; i++)
for (int j=; j<=m; j++) {
a[i][j]=read();
sum[i][j]=sum[i-][j]+sum[i][j-]-sum[i-][j-]+a[i][j];
for (int k=,to=toedge(i,j); k<=to; k++) {
f[i][j][k]=(a[i][j]>k);
pre1[i][j][k]=pre1[i][j-][k]+f[i][j][k];
pre2[i][j][k]=pre2[i-][j][k]+f[i][j][k];
}
}
for (int i=; i<=n; i++)
for (int j=; j<=m; j++) {
cnt[i][j][]=-a[i][j];
if (a[i][j]<=) maxh=max(maxh,);
for (int l=max(max(a[i][j],),maxh+),to=toedge(i,j); l<=to;) {
int tmp=check(i,j,l);
if (!tmp) maxh=max(maxh,l),tmp++;
l+=tmp;
}
}
printf("%d\n",maxh);
}
return ;
}
[Luogu] 金字塔神话的更多相关文章
- luogu P1216 [IOI1994][USACO1.5]数字三角形 Number Triangles (递推)
链接:https://www.luogu.org/problemnew/show/P1216 题面: 题目描述 观察下面的数字金字塔. 写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的 ...
- Atitit.软件开发的三层结构isv金字塔模型
Atitit.软件开发的三层结构isv金字塔模型 第一层,Implements 层,着重与功能的实现.. 第二次,spec层,理论层,设计规范,接口,等.流程.方法论 顶层,val层,价值观层,原则, ...
- 在Excel中制作金字塔条形图
使用场景:一项市场调查研究中,男性和女性.赞同和反对.满意和不满意的两方面的消费者,他们在某些项目上的指标分布特性一项产品组合决策中,乐观场景和悲观场景下各产品的获利情况一个产品试销活动中,不同门店渠 ...
- Luogu 魔法学院杯-第二弹(萌新的第一法blog)
虽然有点久远 还是放一下吧. 传送门:https://www.luogu.org/contest/show?tid=754 第一题 沉迷游戏,伤感情 #include <queue> ...
- luogu p1268 树的重量——构造,真正考验编程能力
题目链接:http://www.luogu.org/problem/show?pid=1268#sub -------- 这道题费了我不少心思= =其实思路和标称毫无差别,但是由于不习惯ACM风格的题 ...
- SIFT中的尺度空间和传统图像金字塔
SIFT中的尺度空间和传统图像金字塔 http://www.zhizhihu.com/html/y2010/2146.html 最近自己混淆了好多概念,一边弄明白的同时,也做了一些记录,分享一下.最近 ...
- Atitit 图像金字塔原理与概率 attilax的理解总结qb23
Atitit 图像金字塔原理与概率 attilax的理解总结qb23 1.1. 高斯金字塔 ( Gaussianpyramid): 拉普拉斯金字塔 (Laplacianpyramid):1 1.2 ...
- 软件项目发展历史<人月神话>这本书好
几乎是计算机软件开发的发展历史 人月神话,增加人手并不一定能提高开发速度. 原因在于,有些任务是无法分解的,存在先后顺序.无法同步进行. 增加人手,增加的是沟通成本,相互牵制.可以分解的任务就 ...
- OpenCV图像金字塔:高斯金字塔、拉普拉斯金字塔与图片尺寸缩放
这篇已经写得很好,真心给作者点个赞.题目都是直接转过来的,直接去看吧. Reference Link : http://blog.csdn.net/poem_qianmo/article/detail ...
随机推荐
- Thread,Task,async/await,IAsyncResult
1.线程(Thread) 多线程的意义在于一个应用程序中,有多个执行部分可以同时执行:对于比较耗时的操作(例如io,数据库操作),或者等待响应(如WCF通信)的操作,可以单独开启后台线程来执行,这样主 ...
- 入手线段树 hdu1754
今天学习了线段树的三个基本操作 建树 更新 查找 先理解下什么是线段树就这个题目而言 如果我们用普通的数组去存放 然后依次遍历访问的话 时间太多了线段树利用了二分的思想 把数据以段的形式进行储存 这样 ...
- Spring 后台方法 重定向 与 转发
一.重定向:重定向是客户端行为,在使用时,务必使用全路径,否则可能因为外部环境导致错误 1.URL改变为重定向的URL地址 2.前台页面不能使用Ajax请求提交, 应该使用form表单提交 方法一.参 ...
- Nginx实现同一端口HTTP跳转HTTPS
小目标:在只监听一个端口的情况下,将http访问跳转为https. 一般情况下http协议使用80端口,https协议443端口.要实现http强制转https是非常简单的事,随便都可以找到很多方案. ...
- 修改下jsp 默认编码,避免被坑
修改下jsp 默认编码 ![](http://images2017.cnblogs.com/blog/1128666/201710/1128666-20171017143745927-14235413 ...
- java集合的作用
从架构的方面来理解,可能稍微容易一点.在编程中,需要管理很多对象集.比如某班全部同学,某个公司所有人员资料等.要管理这些资料,java必须提供某种数据结构支持.由于时间,空间,安全的考虑,有各种不同的 ...
- React中setState如何修改深层对象?
在React中经常会使用到setState,因为在react生态中,state就是一切.在开发过程中,时长会在state中遇到一些比较复杂的数据结构,类似下面这样的: 这时需要我们修改list中obj ...
- redis数据结构分析 (redisObject、SDS)
redis是一个key-value储存系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set ...
- DNSMaper 一款子域名枚举与地图标记工具
DNSMaper DNSMaper拥有与众多子域名枚举工具相似的功能,诸如域传送漏洞检测,子域名枚举,IP地址获取 文件说明├── dnsmaper.py(核心代码)├── dnsmapper.png ...
- SpringMVC返回void的三大方法
版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons) 在是springMVC的void的返回值中,有三大方法可以运行,个人觉得 ...