给定平面内平行于坐标轴的一个矩形,从矩形内选

择一些点,从这些点向右和向上各射出一条射线,

请问:这些射线将矩形分成了多少份。

数据格式:

输入的第一行包含两个整数x, y,表示矩形是由(0,

0), (x, 0), (x, y), (0, y)四个点围成的。

第二行包含一个整数n,表示矩形内的点的数量。

接下来n行,每个两个整数xi, yi,表示矩形内的一

个点。输入保证所有的点都在矩形内部而且没有两

个点有相同的横坐标或纵坐标。

输出一个整数,表示从给定的点射出的射线将矩形

分成的份数。

例如,输入:

10 10

3

1 3

3 1

2 4

程序应该输出:

6

【数据规模和约定】

对于10%的数据,1<=n<=10,1<=x, y<=100;

对于30%的数据,1<=n<=1000,

1<=x,y<=1000;

对于60%的数据,1<=n<=10000,

1<=x,y<=1000000;

对于100%的数据,1<=n<=100000,

1<=x,y<=1000000000,1<xi<x,1<yi<y。

资源约定:

峰值内存消耗(含虚拟机) < 256M

CPU消耗 < 1000ms

请严格按要求输出,不要画蛇添足地打印类似:“

请您输入…” 的多余内容。

所有代码放在同一个源文件中,调试通过后,拷贝

提交该源码。

注意:不要使用package语句。不要使用jdk1.7及

以上版本的特性。

注意:主类的名字必须是:Main,否则按无效代码

处理。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner; public class Main {
public static long x, y;
public static int n;
public static Point[] P;
public static long count = 1;
public static ArrayList<Integer> list = new ArrayList<Integer>(); class MyComparator implements Comparator<Point> { public int compare(Point arg0, Point arg1) {
if(arg0.x > arg1.x)
return 1;
else if(arg0.x < arg1.x)
return -1;
else if(arg0.x == arg1.x) {
if(arg0.y > arg0.y)
return 1;
else if(arg0.y < arg0.y)
return -1;
else
return 0;
}
return 0;
} } static class Point {
public int x;
public int y; public Point(int x, int y) {
this.x = x;
this.y = y;
}
} public void getResult() {
Arrays.sort(P, new MyComparator());
list.add(P[n - 1].y);
count++;
for(int i = n - 2;i >= 0;i--) {
if(P[i].x == P[i + 1].x) {
if(P[i + 1].y > P[i].y) {
int j = list.indexOf(P[i + 1].y);
list.remove(j);
list.add(P[i].y);
}
count++;
}
else {
Collections.sort(list);
int j = 0;
for(;j < list.size();j++)
if(list.get(j) >= P[i].y)
break;
count = count + j + 1;
if(!list.contains(P[i].y))
list.add(P[i].y);
}
}
System.out.println(count);
} public static void main(String[] args) {
Main test = new Main();
Scanner in = new Scanner(System.in);
x = in.nextLong();
y = in.nextLong();
n = in.nextInt();
P = new Point[n];
for(int i = 0;i < n;i++) {
int x = in.nextInt();
int y = in.nextInt();
P[i] = new Point(x, y);
}
test.getResult();
}
}

Java实现分割矩形的更多相关文章

  1. java集合分割

    java集合分割成等份的小集合: private <T> List<List<T>> getSubList(List list,int len) { if(list ...

  2. java 竖线分割字符串的问题

    java 竖线分割字符串的问题 例1: String[] paraStr = "6010;320100;A".split(";"); System.out.pr ...

  3. Java中分割字符串

    java.lang.String 的 split() 方法, JDK 1.4 or later public String[] split(String regex,int limit) 示例代码 p ...

  4. Java StringTokenizer分割字符串

    除了String本身的split方法,JDK在很早就提供了StringTokenizer这个类来分割字符串: 不过,由于正则表达式和String本身的功能越来越多,StringTokenizer已经被 ...

  5. Java字符串分割

    java中字符串的分割函数,split("你想要分割的字符", 你想要最多分割为多少段,正整数) 注意事项: 1.分割特殊字符考虑转义字符的使用.如: . \ | 2.第二个参数: ...

  6. Java字符串分割(转)

    java.lang.String 的 split() 方法, JDK 1.4 or later public String[] split(String regex,int limit) 示例代码 p ...

  7. java字符串分割的小练习

    最近看到一个网友的一个小问题,有关字符串分割的,思考了一下,后面给出代码:碰到一个java字符串判断结尾的问题,发现与c\c++以"\0"判断字符串结尾不同的是,java中字符串是 ...

  8. 1.Java 字符分割

    使用方法 性能比较 使用方法 或|,点.,加+,乘*,在字符串中出现时,如果这个字符串需要被split,则split时候,需要在前面加两个反斜杠. 与&,在split时候,不需要转义. 一.j ...

  9. java文件分割及合并

    分割设置好分割数量,根据源文件大小来把数据散到子文件中代码如下; package word; import java.io.File; import java.io.FileInputStream; ...

随机推荐

  1. [csu1605]数独(精确覆盖问题)

    题意 :给定数独的某些初始值,规定每个格子的得分,求得分最大的数独的解. 思路:这是某年的noip的原题,高中时就写过,位运算也就是那个时候学会的--.这题明显是暴搜,但是需要注意两点,一是需要加一些 ...

  2. Python基础语法day_03——列表

    day_03 列表是什么 在Python中,用[]来表示列表,并用逗号来分隔其中的元素.下面是一个简单的列表示例: >>> bicycles = ['treak','cannonda ...

  3. Spring全家桶之spring boot(一)

    spring boot框架抛弃了繁琐的xml配置过程,采用大量的默认配置简化我们的开发过程.使用spring boot之后就不用像以前使用ssm的时候添加那么多配置文件了,spring boot除了支 ...

  4. 非系统盘根目录出现msdia80.dll文件,能否删除?

    出现此问题的原因:计算机上安装了 Microsoft Visual C++ 2005 可再发行组件时,Msdia80.dll文件被错误安装在其他驱动器的根文件夹中. 它的正确路径应该是"C: ...

  5. ES6-10笔记(一)

    大纲 (慕课的图先用着) scope-作用域 作用域是指程序源代码中定义变量的区域,规定了如何查找变量,也就是确定当前执行代码对变量的访问权限. JavaScript作用域共有两种主要的工作模型--词 ...

  6. Django ORM性能优化之count和len方法的选择(非常详细推荐干货)

    接下来我将从源码层面分情况和应用分析我们在计算queryset数据集时是用orm的count函数计算长度还是用len函数计算数据集长度. 首先,我们知道ORM查询queryset数据集是惰性查询的,只 ...

  7. 我的excel是2003版本的,里边有sheet1、sheet2两个工作表,当使用GetOleDbSchemaTable获取表Schema时,结果是4个,分别为: sheet1 sheet1$ sheet2 sheet2$

    原帖地址:http://bbs.csdn.net/topics/310230098 ---------------------------------------------------------- ...

  8. 苏浪浪 201771010120 《面向对象程序设计(java)》第七章学习总结

    第七周 1.实验目的与要求 (1)进一步理解4个成员访问权限修饰符的用途: (2)掌握Object类的常用API用法: (3)掌握ArrayList类用法与常用API: (4)掌握枚举类使用方法: ( ...

  9. Golang源码学习:调度逻辑(二)main goroutine的创建

    接上一篇继续分析一下runtime.newproc方法. 函数签名 newproc函数的签名为 newproc(siz int32, fn *funcval) siz是传入的参数大小(不是个数):fn ...

  10. java-五大内存图

    jrm—Java虚拟机在进行程序运行时会向cpu申请一个内存约为10%左右,该内存被jrm分为5大区域 一:栈内存(stack)用来存储变量 当栈消失时,变量也随之消失.二:堆内存(heap)在Jav ...