Java实现分割矩形
给定平面内平行于坐标轴的一个矩形,从矩形内选
择一些点,从这些点向右和向上各射出一条射线,
请问:这些射线将矩形分成了多少份。
数据格式:
输入的第一行包含两个整数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实现分割矩形的更多相关文章
- java集合分割
java集合分割成等份的小集合: private <T> List<List<T>> getSubList(List list,int len) { if(list ...
- java 竖线分割字符串的问题
java 竖线分割字符串的问题 例1: String[] paraStr = "6010;320100;A".split(";"); System.out.pr ...
- Java中分割字符串
java.lang.String 的 split() 方法, JDK 1.4 or later public String[] split(String regex,int limit) 示例代码 p ...
- Java StringTokenizer分割字符串
除了String本身的split方法,JDK在很早就提供了StringTokenizer这个类来分割字符串: 不过,由于正则表达式和String本身的功能越来越多,StringTokenizer已经被 ...
- Java字符串分割
java中字符串的分割函数,split("你想要分割的字符", 你想要最多分割为多少段,正整数) 注意事项: 1.分割特殊字符考虑转义字符的使用.如: . \ | 2.第二个参数: ...
- Java字符串分割(转)
java.lang.String 的 split() 方法, JDK 1.4 or later public String[] split(String regex,int limit) 示例代码 p ...
- java字符串分割的小练习
最近看到一个网友的一个小问题,有关字符串分割的,思考了一下,后面给出代码:碰到一个java字符串判断结尾的问题,发现与c\c++以"\0"判断字符串结尾不同的是,java中字符串是 ...
- 1.Java 字符分割
使用方法 性能比较 使用方法 或|,点.,加+,乘*,在字符串中出现时,如果这个字符串需要被split,则split时候,需要在前面加两个反斜杠. 与&,在split时候,不需要转义. 一.j ...
- java文件分割及合并
分割设置好分割数量,根据源文件大小来把数据散到子文件中代码如下; package word; import java.io.File; import java.io.FileInputStream; ...
随机推荐
- 08JAVA基础关键字(final、static)以及抽象类和接口
一.关键字 1.final 修饰类 修饰变量 修饰成员方法 该类为最终类,不能被继承 该变量为常量 该成员方法不能被重写 2.static (1).生命周期 随着类的加载而加载 (2).特点 被本类所 ...
- Hive环境搭建和SparkSql整合
一.搭建准备环境 在搭建Hive和SparkSql进行整合之前,首先需要搭建完成HDFS和Spark相关环境 这里使用Hive和Spark进行整合的目的主要是: 1.使用Hive对SparkSql中产 ...
- Codeforces 1105D(Kilani and the Game,双队列bfs)
AC代码: #include<bits/stdc++.h> #define ll long long #define endl '\n' #define mem(a,b) memset(a ...
- TreeSet的两种实现方法:Comparable和Comparator(Java比较器)
Comparable与Comparator实际上是TreeSet集合的两种实现方式,用来实现对象的排序.下边介绍一下两种比较器的使用方法和区别. Comparable称为元素的自然顺序,或者叫做默认顺 ...
- 「雕爷学编程」Arduino动手做(24)——水位传感器模块
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里 ...
- vue组件试错
[Vue warn]: Property or method "child1" is not defined on the instance but referenced duri ...
- LTC6804读写配置寄存器
一.写配置寄存器步骤及函数封装 写配置寄存器 1.把CSB拉低至低电平: 2.发送WRCFG命令(0x00 0x01)及其PEC(0x3D 0x6E): 3.发送配置寄存器的CFGR0字节,然后继续发 ...
- 5.6 Go 常用函数
5.6 Go 常用函数 最正确的学习模块姿势: https://golang.org/pkg/ //golang官网 程序开发常用函数 strings处理字符串相关 统计字符串长度,按字节 len(s ...
- Gym101630C Connections
题目大意: 给出一个\(n\)个点\(m\)条边的有向图,无自环无重边.要求把这个图进行删边,直到只剩下\(2n\)条边,使得图中每个点都可以相互连通. 知识点: DFS 解题思路: 从点\(1\)出 ...
- CF861D
题目链接:http://codeforces.com/contest/861/problem/D 解题思路: 优雅的暴力. 对于输入的每一个号码,从短到长找出它的所有子串,用 vector 保存每个号 ...