3293. 风险人群筛查

简介: 3293. 风险人群筛查

某地疫情爆发后,出于“应检尽检”的原则,我们想要通知所有近期经过该高危区域的居民参与核酸检测。


想要找出经过高危区域的居民,分析位置记录是一种简单有效的方法。


具体来说,一位居民的位置记录包含 t 个平面坐标 (x1,y1),(x2,y2),…,(xt,yt),其中 (xi,yi) 表示该居民 i 时刻所在位置。


高危区域则可以抽象为一个矩形区域(含边界),左下角和右上角的坐标分别为 (xl,yd) 和 (xr,yu),满足 xl<xr 且 yd<yu。


考虑某位居民的位置记录,如果其中某个坐标位于矩形内(含边界),则说明该居民经过高危区域;进一步地,如果其中连续 k 个或更多坐标均位于矩形内(含边界),则认为该居民曾在高危区域逗留。


需要注意的是,判定经过和逗留时我们只关心位置记录中的 t 个坐标,而无需考虑该居民在 i 到 i+1 时刻之间位于何处。


给定高危区域的范围和 n 位居民过去 t 个时刻的位置记录,试统计其中经过高危区域的人数和曾在高危区域逗留的人数。


输入格式

输入共 n+1 行。


第一行包含用空格分隔的七个整数 n、k、t、xl、yd、xr 和 yu,含义如上文所述。


接下来 n 行,每行包含用空格分隔的 2t 个整数,按顺序表示一位居民过去 t 个时刻的位置记录 (x1,y1),(x2,y2),⋯,(xt,yt)。


输出格式

输出共两行,每行一个整数,分别表示经过高危区域的人数和曾在高危区域逗留的人数。


数据范围

全部的测试点满足 1≤n≤24,1≤k≤t≤103,所有坐标均为整数且绝对值不超过 106。

本题官网给出的 n 的范围是 1≤n≤20,但是官网实际数据中 n 的范围是 1≤n≤24,特此声明,并将数据与官网实际数据范围保持一致。


输入样例1:

5 2 6 20 40 100 80

100 80 100 80 100 80 100 80 100 80 100 80

60 50 60 46 60 42 60 38 60 34 60 30

10 60 14 62 18 66 22 74 26 86 30 100

90 31 94 35 98 39 102 43 106 47 110 51

0 20 4 20 8 20 12 20 16 20 20 20


输出样例1:

3

2


样例1解释

如下图红色标记所示,前三条位置记录经过了高危区域;


但第三条位置记录(图中左上曲线)只有一个时刻位于高危区域内,不满足逗留条件。


2.png


输入样例2:

1 3 8 0 0 10 10

-1 -1 0 0 0 0 -1 -1 0 0 -1 -1 0 0 0 0


输出样例2:

1

0


样例2解释

该位置记录经过了高危区域,但最多只有连续两个时刻位于其中,不满足逗留条件。


思路

用结构体来存储每个点的坐标,用数组来记录每个点是否在高风险区内

如果这个点在高风险区内,则s[i] = s[ i - 1] + 1;否则把s[i]置为0

这样当s[i] >= k时,则说明它连续经过了k个高风险区的点,满足逗留条件


#include <iostream>
using namespace std;
const int N = 100010;
struct point{
    int x,y;
}p[N];
int r[N];
int by,stay;
int main()
{
    int n,k,t,xl,yd,xr,yu;
    cin>>n>>k>>t>>xl>>yd>>xr>>yu;
    for(int i = 0; i < n; i++)
    {
        long long res1 = 0,res2 = 0;
        for(int i = 1; i <= t; i++)
        {
            cin>>p[i].x>>p[i].y;
            if(p[i].x >= xl&&p[i].x <= xr&& p[i].y >= yd&&p[i].y <= yu)
            {
                r[i] = r[i - 1] + 1;
            }else {
                r[i] = 0;
            }
        }
        for(int i = 1; i <= t; i++)
        {
            if(r[i] >= k)res2++;
            if(r[i] >= 1)res1++;
        }
        if(res1) by++;
        if(res2) stay++;
    }
    cout<<by<<endl<<stay<<endl;
    return 0;
}



目录
相关文章
|
存储 消息中间件 Kafka
Hudi 压缩(Compaction)实现分析
Hudi 压缩(Compaction)实现分析
454 1
|
6月前
|
人工智能 自然语言处理 PyTorch
Instella:AMD开源30亿参数语言模型!训练效率碾压同级选手
Instella是AMD推出的30亿参数开源语言模型,基于自回归Transformer架构,支持多轮对话、指令跟随和自然语言理解,适用于智能客服、内容创作和教育辅导等多个领域。
117 1
|
SQL 分布式计算 数据可视化
数据分析案例-数据分析师岗位招聘信息可视化
数据分析案例-数据分析师岗位招聘信息可视化
338 0
|
存储 消息中间件 缓存
|
数据采集 Python
环境调试——EA-LSS
对比 E-H:同样增加速度增强之后,放大图像的调整范围,DAL 会比 BEVFusion 略微提升。作者说速度增强挑战了点云线索的回归任务预测,这迫使模型利用图像线索。(没懂,插个眼)
364 1
|
小程序 JavaScript Java
基于SpringBoot+Vue+uniapp微信小程序的速达物流信息查询微信小程序的详细设计和实现
基于SpringBoot+Vue+uniapp微信小程序的速达物流信息查询微信小程序的详细设计和实现
165 0
|
数据采集 定位技术
Google Earth Engine(GEE)——全球建筑物数据集(MSBuildings数据集)包含微软7.77忆建筑物
Google Earth Engine(GEE)——全球建筑物数据集(MSBuildings数据集)包含微软7.77忆建筑物
300 0
|
存储 Kubernetes 负载均衡
K8S基础篇:概念与架构
**Kubernetes** 是一个可移植的、可扩展的开源平台,用于**管理容器化的工作负载和服务,可促进声明式配置和自动化**。 Kubernetes 拥有一个庞大且快速增长的生态系统。Kubernetes 的服务、支持和工具广泛可用
515 2
K8S基础篇:概念与架构
|
机器学习/深度学习 编解码 自然语言处理
PAI-Diffusion中文模型全面升级,海量高清艺术大图一键生成
本文主要介绍-Diffusion中文模型大幅升级,本文详细介绍PAI-Diffusion中文模型的新功能和新特性。
PAI-Diffusion中文模型全面升级,海量高清艺术大图一键生成
|
存储 算法 C++
一篇文章让你熟悉unordered_map及其模拟实现(下)
unordered_map哈希策略函数 1. load_factor float load_factor() const noexcept; load_factor 函数用于获取当前