七月


私信TA

用户名:yuzefeng

访问量:4655

签 名:

等  级
排  名 1734
经  验 2678
参赛次数 0
文章发表 38
年  龄 0
在职情况 学生
学  校 成都理工大学
专  业

  自我简介:

问题描述:

银行系中有很多恒星,H 君晚上无聊,便爬上房顶数星星,H 君将整个银河系看做一个平面,左上角为原点(坐标为(1, 1))。

现在有 n 颗星星,他给每颗星星都标上坐标(xi,yi)

表示这颗星星在第 x 行,第 y 列。

现在, H 君想问你 m 个问题,给你两个点的坐标(x1,y1)(x2,y2),表示一个矩形的左上角的点坐标和右下角的点坐标。

请问在这个矩形内有多少颗星星(边界上的点也算是矩形内)



题目:题目编号   1994



代码:


import java.util.*;

public class Main {
   public static void main(String[] args) {
         Scanner scanner = new Scanner(System.in);
         int n = scanner.nextInt(); //星星数量
         ArrayList<Integer> xlist = new ArrayList();
         ArrayList<Integer> ylist = new ArrayList();
         for(int i = 1 ; i <= n ; i ++){
             xlist.add(scanner.nextInt());
             ylist.add(scanner.nextInt());
         }

         int q = scanner.nextInt(); //问题数量
         for(long i = 1 ;i <= q;i ++){
             int count = 0;
             int x1 = scanner.nextInt();
             int y1 = scanner.nextInt();
             int x2 = scanner.nextInt();
             int y2 = scanner.nextInt();
             for(int j = 0 ; j < n;j ++ ){
                 if(xlist.get(j) >= x1 && xlist.get(j) <= x2 &&
                         ylist.get(j) >= y1 && ylist.get(j) <= y2)
                     count++;
             }
             System.out.println(count);
         }

   }
}

 

0.0分

0 人评分

  评论区

可以去了解下前缀和
2021-12-09 22:37:33
你这个就相当于n^2的暴力,会超时。
考虑到没有修改,可以考虑使用前缀和 O(n) 预处理,对于每一次询问 O(1) 得出结果
2021-12-09 22:37:08
  • «
  • 1
  • »