zoukankan      html  css  js  c++  java
  • 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();
         }
    }
    
  • 相关阅读:
    sdn&openswitch速查
    此博客已迁移【又要迁回来...】
    设计模式 之 里氏代换原则 (Liskov's Substitution Principle)
    设计模式 之 单一职责原则 (Single Responsibility Principle)
    设计模式 之 接口隔离原则 (Interface Segregation Principle)
    设计模式 之 依赖倒置原则 (Dependency Inversion Principle)
    设计模式 之 开放封闭原则 (Open Close Principle)
    设计模式 之 引言
    git && github
    book-rev8 Chapter 0 Operating system interfaces
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13078046.html
Copyright © 2011-2022 走看看