• POJ 1328 Java实现


    本题借鉴了别人的做题思想,主要如下
    /**
     *对要扫描到的每个岛求出雷达可以安置在海岸上的区间[left,right],  *对这些区间按left从小到大排序
     *从第一个区间的right点开始安置雷达,然后依次检索下一个区间,
     *若下一个区间完全在刚刚安置雷达的区间内(new.left>=pre.left &&
     * new.right<=pre.right ),则将刚刚安置的雷达重新安置在这个区间(new)的右端;  *若下一个区间的左端点在刚刚安置雷达的区间内,而右端点在刚刚安置雷达的  *区间右侧,则可忽略这个区间向下进行;
     *若下一个区间与刚刚安置雷达的区间完全不相交,则在这个新区间右端内安置  *一个新雷达 */
    第一次提交没有通过,显示Runtime_error,测试了很多数据没有错误,后来吧数组大小改为1000,顺利通过.

     1 public class Point implements Comparable<Point> {
     2 
     3     public Point() {
     4         // TODO Auto-generated constructor stub
     5 
     6     }
     7 
     8     public double left;
     9     public double right;
    10 
    11     private void setLeft(double left) {
    12         this.left = left;
    13     }
    14 
    15     private void setRight(double right) {
    16         this.right = right;
    17     }
    18 
    19     @Override
    20     public int compareTo(Point o)// 实现接口
    21     {
    22         if (o != null && o instanceof Point) {
    23             Point p = (Point) o;
    24             if (left < p.left)
    25                 return -1;
    26             else if (left == p.left)
    27                 return 0;
    28             else
    29                 return 1;
    30         } else
    31             return -1;
    32     }
    33 
    34     public static void main(String[] args) {
    35         // TODO Auto-generated method stub
    36         int n, d; // 岛屿个数和雷达侦测距离
    37         Point[] poi = new Point[100]; // 存储每个岛屿
    38         Scanner sc = new Scanner(System.in);
    39         int num = 1; // case个数
    40         int[] casenum = new int[100]; // 每个case的所需雷达数
    41         n = sc.nextInt();
    42         d = sc.nextInt();
    43         while (n != 0 && d != 0) {
    44             boolean legal = true;     //判断一个case是否合法,即能否被雷达覆盖
    45             int x, y;
    46             for (int i = 0; i < n; i++) {
    47                 x = Integer.parseInt(sc.next());
    48                 y = Integer.parseInt(sc.next());
    49                 poi[i] = new Point();
    50                 // System.out.println(x-Math.sqrt(d*d-y*y));
    51                 // double temp1=x-Math.sqrt(d*d-y*y);
    52                 poi[i].setLeft(x - Math.sqrt(d * d - y * y));
    53                 poi[i].setRight(x + Math.sqrt(d * d - y * y));
    54                 if (y > d)
    55                     legal = false;
    56             }
    57             Arrays.sort(poi, 0, n);   //用到了上面重写的compareTO
    58             if (!legal) {
    59                 // System.out.println("Case "+num+": -1");
    60                 casenum[num - 1] = -1;
    61                 num++;
    62             } else {
    63                 double pre = poi[0].right;
    64                 int radar_num = 1;
    65                 for (int i = 1; i < n; i++) {
    66                     if (poi[i].left > pre) {
    67                         radar_num++;
    68                         pre = poi[i].right;
    69                     } else if (poi[i].right < pre) {
    70                         pre = poi[i].right;
    71                     }
    72                 }
    73                 // System.out.println("Case "+num+": "+radar_num);
    74                 casenum[num - 1] = radar_num;
    75                 num++;
    76             }
    77             n = sc.nextInt();
    78             d = sc.nextInt();
    79 
    80         }
    81         num--;
    82         for (int i = 0; i < num; i++) {
    83             int j = i + 1;
    84             System.out.println("Case " + j + ": " + casenum[i]);
    85         }
    86 
    87     }
    88 
    89 }
    View Code
  • 相关阅读:
    SERV-U处于“域正离线”怎么办?
    在wampserver3.0.6中配置虚拟主机(设置二级域名)
    解决Win7系统新建选项中无记事本问题
    解决Windows Server 2008 R2安装WAMPSERVER3.0.6问题总结
    php实现定时任务的思路
    https配置for apache
    jquery传值
    有趣的em
    自我感觉良好的配搭
    正则基础整理
  • 原文地址:https://www.cnblogs.com/duanqiong/p/4403437.html
Copyright © 2020-2023  润新知