问题描述:

银行系中有很多恒星,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分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 3 条评论

七月 3年前 回复TA
@Catshao 好的,谢谢大佬
Catshao 3年前 回复TA
可以去了解下前缀和
Catshao 3年前 回复TA
你这个就相当于n^2的暴力,会超时。
考虑到没有修改,可以考虑使用前缀和 O(n) 预处理,对于每一次询问 O(1) 得出结果