一、题目内容
二、题目分析
这题没什么难点,只要将输入的坐标储存在数组中,然后一个个查看,如果在矩形范围内,就让cnt加一,但是唯一一点就是,我们需要输出经过和逗留的人数,经过的人数很容易得出,只要有一个点在矩形内就可以判定经过风险区,而逗留却需要连续的k个及以上的点在矩形内,所以这题的难点就是如何判断连续的点,在这里我只需要当点在矩形内就加一,如果某一次出去了,就将刚才的数据保存并清零,最后将最大停留时间和k比较,如果大于k,说明此人逗留了,就让逗留人数加一即可。
三、完整代码
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
//居民数量
int n=sc.nextInt();
//连续k个点则逗留
int k=sc.nextInt();
//时刻t,给2t个数作为坐标
int t=sc.nextInt();
//左下右上坐标
int x1=sc.nextInt();
int y1=sc.nextInt();
int x2=sc.nextInt();
int y2=sc.nextInt();
int [][]arr=new int[n][2*t];
for(int i=0;i<n;i++)
{
for(int j=0;j<2*t;j++)
{
arr[i][j]=sc.nextInt();
}
}
int cntdouliu=0,cntjingguo=0;
for(int i=0;i<n;i++)
{
int tmpcnt=0;
int max=0;
for(int j=0;j<2*t;j+=2)
{
if(arr[i][j]>=x1&&arr[i][j]<=x2&&arr[i][j+1]>=y1&&arr[i][j+1]<=y2){
tmpcnt++;
}
else{
tmpcnt=0;
}
max=Math.max(max,tmpcnt);
}
if(max!=0)
cntjingguo++;
if(max>=k)
cntdouliu++;
}
System.out.println(cntjingguo);
System.out.println(cntdouliu);
}
}