洛谷 P1169 [ZJOI2007]棋盘制作 (悬线法)
2024-08-31 13:41:35
和玉蟾宫很像,条件改成不相等就行了。
悬线法题目 洛谷 P1169 p4147 p2701 p1387
#include<cstdio>
#include<algorithm>
#define REP(i, a, b) for(int i = (a); i < (b); i++)
#define _for(i, a, b) for(int i = (a); i <= (b); i++)
using namespace std;
const int MAXN = 2123;
int up[MAXN][MAXN], l[MAXN][MAXN];
int r[MAXN][MAXN], a[MAXN][MAXN], n, m;
int main()
{
scanf("%d%d", &n, &m);
_for(i, 1, n)
_for(j, 1, m)
{
scanf("%d", &a[i][j]);
l[i][j] = r[i][j] = j;
up[i][j] = 1;
}
_for(i, 1, n)
{
_for(j, 2, m)
if(a[i][j] != a[i][j-1])
l[i][j] = l[i][j-1];
for(int j = m - 1; j >= 1; j--)
if(a[i][j] != a[i][j+1])
r[i][j] = r[i][j+1];
}
int ans1 = 0, ans2 = 0;
_for(i, 1, n)
_for(j, 1, m)
{
if(i > 1 && a[i][j] != a[i-1][j])
{
up[i][j] = up[i-1][j] + 1;
l[i][j] = max(l[i][j], l[i-1][j]);
r[i][j] = min(r[i][j], r[i-1][j]);
}
int w = r[i][j] - l[i][j] + 1, h = up[i][j];
ans1 = max(ans1, min(w, h) * min(w, h));
ans2 = max(ans2, w * h);
}
printf("%d\n%d\n", ans1, ans2);
return 0;
}
最新文章
- canvas第一天
- 用C++开发Binder服务
- IOS开发基础知识--碎片45
- Hibernate学习笔记(二)
- CI框架中怎么传递大数据给PHP?
- JavaScript学习总结 Ajax和Http状态字
- Swift用UIBezierPath来画圆角矩形、自定义多路径图形
- window live writer的曲折安装过程
- 分数(有理数)的四则运算PAT1088
- H5单页面架构:自定义路由 + requirejs + zepto + underscore
- android App Widgets
- Facade ——为子系统的一组接口提供一致界面
- JAVA之旅(三十二)——JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用
- python常用模块——collections
- amazeUI的confirm控件记录缓存问题的解决办法
- Java 11 已发布,String 还能这样玩!
- 20.Module 的语法
- systemctl介绍
- centos6和7关闭防火墙
- visual studio 2015 rc &;cordova -hello world
热门文章
- Django中模块的加载原理
- These relative modules were not found:...{";sourceM ap";:false} 报错解决
- debian 9 安装Virtual Box
- oracle间隔分区
- Android动态加载字节码
- 算法 - 求一个数组的最长递减子序列(C++)
- 利用wget 抓取 网站网页 包括css背景图片
- yolo源码解析(2):处理图片
- bzoj1066: [SCOI2007]蜥蜴(最大流)
- php设计模式之桥接模式