最大矩形面积

Time Limit: 1000 ms Memory Limit: 65536 KiB

Problem Description

在一个矩形区域内有很多点,每个点的坐标都是整数。求一个矩形,使之内部没有点,且面积最大。所求矩形的边与坐标轴平行。

Input

一个整数t,表示测试组数。

整数l,w表示矩形横向边长和竖向边长。

一个整数n,表示该矩形内点的个数。

n个点的坐标x,y。

Output

最大面积。

Sample Input

2

2 3

0

10 10

4

1 1

9 1

1 9

9 9

Sample Output

6

80

题解:这道题是一道偏向思维的题目,先让点从左往右跑一边然后从上往下跑一边找出最大的矩形面积。注意边界的更新,需要让这个点再边界内部,一开始 我想的是根据面积最小的损失来更新这个点,结果后来意识到,比如一个点的x坐标7,此时的左右边界的值跟新为(0,6),这个点就不再范围内了,这样就导致该点不再所求的矩形的边上,然而循环求的意义在于求与这个点有关的矩形的面积(点在矩形边上)。

import java.util.*;

public class Main {
public static void main(String []args)
{
Scanner cin = new Scanner(System.in);
int t,i,lr,ud;
node a = new node();
t = cin.nextInt();
while(t-->0)
{
a.l = cin.nextInt();
a.w = cin.nextInt();
a.n = cin.nextInt();
a.INIT();
//System.out.println(a.n);
for(i=2;i<a.n;i++)
{
a.s[i].x = cin.nextInt();
a.s[i].y = cin.nextInt();
}
lr = a.get_lr();
ud = a.get_ud();
System.out.println(Math.max(lr, ud));
}
cin.close();
}
} class point
{
int x,y;
}
/*具体的解题代码*/
class node
{
int l,w,n;
point s[] = new point[1050];
/*初始化,让边界成为一个点(最大的矩形面积)*/
void INIT()
{
int i;
n = n + 2;
for(i=0;i<n;i++)
s[i] = new point();
s[0].x = 0;
s[0].y = 0;
s[1].x = l;
s[1].y = w;
}
/*根据x的大小对点进行排序*/
void sortlr()
{
int i,j;
point t = new point();
for(i=0;i<n;i++)
{
for(j=0;j<n-i-1;j++)
{
if(s[j].x>s[j+1].x)
{
t = s[j];
s[j] = s[j+1];
s[j+1] = t;
}
else if(s[j].x==s[j+1].x)
{
if(s[j].y>s[j+1].y)
{
t = s[j];
s[j] = s[j+1];
s[j+1] = t;
}
}
}
}
}
/*根据y的大小对点进行排序*/
void sortud()
{
int i,j;
point t = new point();
for(i=0;i<n;i++)
{
for(j=0;j<n-i-1;j++)
{
if(s[j].y>s[j+1].y)
{
t = s[j];
s[j] = s[j+1];
s[j+1] = t;
}
else if(s[j].y==s[j+1].y)
{
if(s[j].x>s[j+1].x)
{
t = s[j];
s[j] = s[j+1];
s[j+1] = t;
}
}
}
}
}
/*从左往右寻找最大的矩形面积*/
int get_lr()
{
int ans = 0,i,j,du,dd;
sortlr();
for(i=0;i<n-1;i++)
{
du = w;
dd = 0;
for(j=i+1;j<n;j++)
{
if(s[i].x!=s[j].x)
{
ans = Math.max(ans, (s[j].x-s[i].x)*(du-dd));
/*更新上下边界,注意让此时的点在边界范围内(即该点在矩形的边上)*/
if(s[j].y>s[i].y)
du = Math.min(du, s[j].y);
else
dd = Math.max(dd,s[j].y);
}
}
}
return ans;
}
/*从下往上找最大的矩形面积*/
int get_ud()
{
int ans = 0,i,j,dl,dr;
sortud();
for(i=0;i<n-1;i++)
{
dl = 0;
dr = l;
for(j=i+1;j<n;j++)
{
if(s[i].y!=s[j].y)
{
ans = Math.max(ans, (s[j].y-s[i].y)*(dr-dl));
/*更新上下边界*/
if(s[j].x>s[i].x)
dr = Math.min(dr, s[j].x);
else
dl = Math.max(dl, s[j].x);
}
}
}
return ans;
}
}

Java练习 SDUT-2401最大矩形面积的更多相关文章

  1. Java实现 蓝桥杯VIP基础练习 矩形面积交

    描述 平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴.对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积. 输入 输入仅包含两行,每行描述一个矩形. 在每行中,给出矩 ...

  2. 25.按要求编写一个Java应用程序: (1)编写一个矩形类Rect,包含: 两个属性:矩形的宽width;矩形的高height。 两个构造方法: 1.一个带有两个参数的构造方法,用于将width和height属性初化; 2.一个不带参数的构造方法,将矩形初始化为宽和高都为10。 两个方法: 求矩形面积的方法area() 求矩形周长的方法perimeter() (2)通过继承Rect类编写一个具有

    package zhongqiuzuoye; //自己写的方法 public class Rect { public double width; public double height; Rect( ...

  3. Java实现 LeetCode 223 矩形面积

    223. 矩形面积 在二维平面上计算出两个由直线构成的矩形重叠后形成的总面积. 每个矩形由其左下顶点和右上顶点坐标表示,如图所示. Rectangle Area 示例: 输入: -3, 0, 3, 4 ...

  4. 2015baidu复赛 矩形面积(包凸 && ps:附quickhull模板)

    矩形面积 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  5. HDU 3265 扫描线(矩形面积并变形)

    Posters Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  6. Largest Rectangle in a Histogram(最大矩形面积,动态规划思想)

    Largest Rectangle in a Histogram Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  7. HDU1542 扫描线(矩形面积并)

    Atlantis Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  8. hdu 1542&&poj 1151 Atlantis[线段树+扫描线求矩形面积的并]

    Atlantis Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total S ...

  9. HDU 1542.Atlantis-线段树求矩形面积并(离散化、扫描线/线段树)-贴模板

    好久没写过博客了,这学期不是很有热情去写博客,写过的题也懒得写题解.现在来水一水博客,写一下若干年前的题目的题解. Atlantis Time Limit: 2000/1000 MS (Java/Ot ...

随机推荐

  1. 64位电脑上安装MySQL进行MFC开发的相关问题

    本人环境: 64位win7 + MySQL5.6 安装MySQL的时候有个选项是 选择:32位/64位.默认情况下是安装当前操作系统的位数.但我在使用VS进行开发的时候发现问题: error LNK2 ...

  2. Mybatis逆向工程文件标签的详细介绍:

    ?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUB ...

  3. Go之路一

    一.声明变量 var a int var b string var c []float32 var d func() bool var e struct{ x int } 第1行,声明一个整型类型的变 ...

  4. php工作中常用到的linux命令

    压缩并指定目录举例:zip -r /home/kms/kms.zip /home/kms/server/kms 解压并指定目录举例:unzip /home/kms/kms.zip -d /home/k ...

  5. redis订阅自动退出

    1.打开报错, error_reporting(E_ALL);ini_set('display_errors', '1'); 2.没有报错,不是php最大执行时间问题,原因是socket超时3.有设置 ...

  6. jnhs中国的省市县区邮编坐标mysql数据表

    https://blog.csdn.net/sln2432713617/article/details/79412896 -- 1.之前项目中需要全国的省市区数据,在网上找了很多,发现数据要么不全,要 ...

  7. 访问者模式(Visitor、Element、accept、ObjectStructure、)(操作外置,与数据结构分离)

    访问者模式表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作.从定义可以看出结构对象是使用访问者模式的必备条件,而且这个结构对象必须存在遍历自身各个 ...

  8. 洛谷P1263 宫廷守卫

    P1263 宫廷守卫 题目描述 从前有一个王国,这个王国的城堡是一个矩形,被分为M×N个方格.一些方格是墙,而另一些是空地.这个王国的国王在城堡里设了一些陷阱,每个陷阱占据一块空地. 一天,国王决定在 ...

  9. 【模板】Vector存图 + SPFA

    最近愉快地决定要由边集数组转向Vector存图,顺便开始图论集训 老惯例,以题写模板 P1339 [USACO09OCT]热浪Heat Wave 题目描述 The good folks in Texa ...

  10. 阿里云出手SaaS生态,中国SaaS市场小而不强有望破解

    企业服务SaaS市场还有很大的增长空间.SaaS的鼻祖Salesforces今年5月迈上了千亿美元市值的门槛,再一次为ToB市场注入了兴奋剂.单单一个SaaS CRM,目前全球的市场规模就超过400亿 ...