HNU软件能力实训2-21. 新型冠状病毒(COVID19)传播

2023-05-16

写在前面

你好!欢迎来到我的博客,希望我的思路能够帮到你!

问题描述

防控新冠病毒,必须时刻引起大家的足够重视,特别是人员集中活动场所,保持好社交距离。

然而,在大洋彼岸的 M 国,人们对COVID19并未引起足够重视,他们的领导人川建国同志甚至对居家隔离、戴口罩以及保持社交距离等措施非常不屑,该国疫情已经完全失控。

在一个风景秀丽的小镇,一天早上,有 N 名晨跑爱好者(编号 1 ~ N )沿着优雅的江边景观道朝同一方向进行晨跑,第 i 名跑者从位置 Si 处起跑, 且其速度为 Vi。换句话说,对所有的实数 t ≥ 0,在时刻 t 时第 i 名跑者的位置为 Si + Vi ·t。

很不幸的是,其中一名跑者在 t = 0 的时刻感染了病毒,且是无症状感染者,这种病毒只会在同一时刻处在同一位置的跑者之间传播,新感染了病毒的跑者也会感染其他人,很显然,等待足够长的时间,那么病毒会感染一些特定的跑者。

事后发现其中有一名跑者感染了新冠病毒,如果此人就是在 t = 0 时刻的那名感染者,那么,在 N 名晨跑爱好者中会有多少人感染新冠病毒?

输入形式

输入包含三行:

  • 第一行包含为两个整数 N 和 K,分别表示运动员的人数以及开始时感染了病毒的跑者编号。

  • 第二行包含 N 个正整数 S1、S2、…、SN,用空格隔开,分别表示跑者的起始位置。

  • 第三行包含 N 个正整数 V1、V2、…、VN,用空格隔开,分别表示跑者的速度。

输出形式

输出为一个整数,表示最终被感染人数。

样例输入

6 3
3 9 8 5 7 5
6 6 5 4 6 3

样例输出

3

数据范围

对于50%的评测用例,0< K ≤ N ≤102

对于70%的评测用例,0< K ≤ N ≤104

对于90%的评测用例,0< K ≤ N ≤106

对于100%的评测用例,0< K ≤ N ≤107

解题思路

不得不说,这是训练二中最难的一道题,也是一道追及问题,而作为理科生的我们,肯定都知道物理老师曾经说过的 x-t 图法,但是这道题并不是用 x-t 图法做,而是用于理解题意。

话不多说,上图!

在这里插入图片描述
显然,根据高中物理,①-⑥中,有③和④最终会被感染。但是因为找出所有感染者的思路较难,所以我们反向寻找,找到安全的人的数目。

而安全的人有什么特点呢?

我们将安全的人分为两个部分:一部分人初始位置小于零号感染者;另一部分人初始位置大于零号感染者。

初始位置小于零号感染者的人要想不被感染,其速度只能小于等于右边所有人的最小速度。因为我们将零号感染者看做在右边。右边速度最小的那个人一定会被零号感染者感染。而左边人的速度要是大于这个最小速度,那么也会被感染。

所以初始位置大于零号感染者的人要想不被感染,其速度只能大于等于左边所有人的最大速度。

所以我们以零号感染者作为分界后,找出左边的最大速度,右边的最小速度。

遍历右边时,如果速度大于该速度且位置大于零号感染者的位置,我们将计数器+1。

再遍历左边,遍历时如果速度小于右边的最小速度且位置小于零号感染者的位置,将计数器+1。

最后输出总人数减去安全人数就是答案。

AC代码

#include<iostream>
#include<algorithm>
using namespace std;

struct people
{
    int num;//储存输入的顺序,方便在遍历时找到零号感染者
    int pos;//位置
    int v;//速度
};

bool cmp(const people &l,const people &r)
{
    if(l.pos==r.pos)
    {
        return l.v>r.v;
    }
    return l.pos<r.pos;
}

const int N=10000500;
//发现如果N开成10000010会爆内存
//所以N开大点
people p[N];

int main()
{
    int n,s;
    cin>>n>>s;
    for(int i=0;i<n;i++) cin>>p[i].pos;
    for(int i=0;i<n;i++)
    {
        p[i].num=i+1;//初始化编号
        cin>>p[i].v;
    }
    sort(p,p+n,cmp);//排序
    int lmaxv=-1;
    int mid;//存储零号感染者的位置
    for(mid=0;mid<n;mid++)
    {
        if(p[mid].v>lmaxv) lmaxv=p[mid].v;
        //寻找左边速度最大值
        if(p[mid].num==s) break;
        //如果当前选手是零号感染者,退出循环
    }
    int safe=0;//储存未感染人数
    int rminv=1000000;//初始化
    for(int i=mid;i<n;i++)
    {
        if(p[i].v>=lmaxv&&p[i].pos>p[mid].pos)
            safe++;
        //如果右侧选手速度大于左边的最大速度
        //且右边选手的位置大于零号感染者的位置
        if(p[i].v<rminv) rminv=p[i].v;
        //找到右边速度最小值
    }
    for(int i=0;i<mid;i++)
    {
        if(p[i].v<=rminv&&p[i].pos<p[mid].pos)
            safe++;
        //如果左边选手速度小于右边的最小速度
        //且左边选手的位置小于零号感染者的位置
    }
    cout<<n-safe<<endl;
    //输出总人数减去安全人数
    system("pause");
    return 0;
}

写在最后

如果代码有任何问题,欢迎评论或者私信斧正。如果内容对对你有启发,不妨点个赞吧

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HNU软件能力实训2-21. 新型冠状病毒(COVID19)传播 的相关文章

  • linux驱动开发 - 12_platform 平台驱动模型

    文章目录 platform 平台驱动模型1 platform 总线platform匹配过程 2 platform 驱动platform 驱动框架如下所示 xff1a 3 platform 设备platform 设备信息框架如下所示 xff1
  • 多旋翼飞行器设计与控制(二):基本组成

    一 前言核心问题 二 总体介绍多旋翼系统内部布局 三 机架机身起落架涵道 四 动力系统概述螺旋桨电机电调电池 五 指挥控制系统遥控器和接收器自动驾驶仪地面站数传 一 前言 核心问题 xff08 1 xff09 多旋翼组成结构 机架动力系统控
  • 多旋翼飞行器设计与控制(三):机架设计

    一 布局设计机身基本布局旋翼的安装旋翼和机体半径 xff1a 尺寸和机动性关系 xff1a 重心位置 xff1a 自驾仪安装位置 xff1a 气动布局 xff1a 二 结构设计机体基本设计原则减振设计减噪设计 一 布局设计 机身基本布局 交
  • SLAM学习——使用ARUCO_marker进行AR投影

    一 简介 1 1 目标 增强现实技术 xff08 Augmented Reality xff0c 简称 AR xff09 xff0c 是一种实时地计算摄影机影像的位置及角度并加上相应图像 视频 3D模型的技术 xff0c 这种技术的目标是在
  • k8s安装Prometheus

    注 xff1a 必须要先搭建网页管理容器 xff1b k8s部署dashboard kali yao的博客 CSDN博客 1 Prometheus的概述 Prometheus是一个最初在SoundCloud上构建的开源监控系统 它现在是一个
  • Logstash完成ELK集群

    注 xff1a 本文与同步 9条消息 搭建Elasticsearch和kibana完成初步ELK日志分析平台搭建 kali yao的博客 CSDN博客 logstash搭建 1 logstash介绍 什么是logstash 是一个数据采集
  • SQL基本语句及用法

    目录 一 基本SQL语句用法及概述 1 常用MySQL命令 2 语法规范 3 SQL语句分类 二 数据查询语言 1 基础查询 1 xff09 查询的字段列表可以是字段 常量 表达式 函数等 2 xff09 使用别名 xff0c 字段名和别名
  • PyCharm 社区版 安装 教程(Windows)

    注 xff1a 如果已经安装过python 3 5 及以上版本的解释执行器则跳过此步骤 下载 PyCharm 社区版 软件 PyCharm windows 版本 安装包如下 Thank you for downloading PyCharm
  • 监控zabbix面试题

    目录 1 我们可以用zabbix监控哪些 2 zabbix的主动监控与被动监控 3 Zabbix监控做过哪些 4 zabbix监控mysql的四大性能指标 5 配置zabbix自定义监控流程 6 安全组是什么 xff0c 限制了3306的入
  • 【ros学习】12.ros启动gazebo时摄像头的发布进程被杀死,导致rqt_image_view无法显示画面

    ros启动gazebo时摄像头的发布进程被杀死 xff0c 导致rqt image view即使订阅了正确的话题也无法显示画面 原因是gazebo的版本过低 xff0c 与Rviz不兼容 ubuntu16 04匹配的ros版本是kineti
  • 系统运维面试题

    目录 1 什么是运维 什么是游戏运维 2 在工作中 xff0c 运维人员经常需要跟运营人员打交道 xff0c 请问运营人员是做什么工作的 xff1f 3 请描述下linux 系统的开机启动过程 4 为什么连接的时候是三次握手 xff0c 关
  • Xshell的使用

    本文修改于 xff1a 高效使用XSHELL 简书 jianshu com https www jianshu com p 67b83d3f2e40 一 XShell的概述 1 XSHELL是什么 Xshell是用于Windows平台的功能
  • linux下解压rar和7z压缩文件

    在windows下我们压缩解压文件通常后缀为rar xff0c 在linux下我们压缩解压文件通常后缀为tar 默认在linux下我们不能解压压缩rar文件 我们可以下载rarlinux安装包实现解压压缩后缀为rar的包 下载地址 xff1
  • Filebeat输出json格式的日志并指定message字段的值

    目录 1 开启json格式所需的字段概述 2 配置示例 3 如果问题没有解决可点击官网 1 开启json格式所需的字段概述 filebeat配置input要有以下字段 json keys under root true json overw
  • Prometheus添加邮件告警和企业微信机器人告警

    我们将在 Prometheus 服务器上编写警报规则 xff0c 这些规则将使用我们收集的指标并在指定的阈值或标准上触发警报 xff0c 收到警报后 xff0c Alertmanager 会处理警报并根据其标签进行路由 一旦路径确定 xff
  • 麒麟ARM64制作nginx,java,php,node基础镜像

    一 环境准备 1 网上搜底层镜像 麒麟容器基础镜像 xff1a docker search kylin 镜像准备 docker pull kylin 注 xff1a 最好自己制作底层镜像 2 自己做底层镜像 注 xff1a 做镜像时需要在麒
  • docker部署简易Prometheus

    注 xff1a 部署前可以先系统的学习一下 xff1a Introduction Prometheus中文技术文档 在之后需要书写自定义告警的 xff0c 需要在学习一下PromQL语言 xff0c 一般网上也能搜到 xff0c 可以在安装
  • k8s面试题-进阶

    1 简述etcd及其特点 etcd是CoreOS团队发起的开源项目 xff0c 是一个管理配置信息和服务发现 xff08 service discovery xff09 的项目 xff0c 它的目标是构建一个高可用的分布式键值 xff08
  • 制作Alpine Linux镜像报错errors: 15 distinct packages available

    1 执行报错 执行docker build t 镜像 版本 f Dockerfile 报错 xff1a 2 查看网上的解决思路 网上文档解决思路 xff1a 这边我做了一下改变把这些写入了dockerfile 加了几个RUN RUN rm
  • C++ class与struct的区别

    在C语言中 xff0c struct是作为数据类型存在的 xff0c 因此其中只能包含变量 xff0c 不可以包含函数 xff0c 结构相对简单 而C 43 43 采用OOP编程思想 xff0c 为struct扩充了很多属性 xff0c 使

随机推荐