CSP认证系列 202009-2 风险人群筛查

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
这个题目本来想利用链表存储每个人的坐标然后再分别取出做判断,但是太耗费时间,看了网上的一些资料后写下如下代码:

#include<iostream>
#include<Windows.h>
using namespace std;
int main(){
    int n,k,t,x_l,y_d,x_r,y_u;
    int x,y,pass,stay;
    pass=0;
    stay=0;
    cin>>n>>k>>t>>x_l>>y_d>>x_r>>y_u;
    for(int i=0;i<n;i++){
        int flag=0;
        int flag1=0;
        int flag2=0; //对每一个人设置三个标志
        for(int j=0;j<t;j++){
            cin>>x>>y;
            if(x<x_l||x>x_r||y>y_u||y<y_d){ //如果这个坐标没有在区域内 那么flag=0
                flag=0;
            }
            else{
                flag++; //经过一次flag就加一次
                if(!flag1) 
                    flag1=1;
                if(!flag2&&flag==k) 
                    flag2=1;
            }
        }
        if(flag1) pass++;
        if(flag2) stay++;
    }
    cout<<pass<<endl<<stay;
    system("pause");
}

为每一个人分别设置了三个flag。其中flag1表示是否经过该区域,flag2表示是否在此地逗留过,flag表示连续经过了高风险区多少次。
这个题目的关键在这里:
在这里插入图片描述
经过一次风险区域 flag就加一。并且遇到了第一个在风险地区的坐标后就把flag1置为1,而后其他坐标不管在不在高风险地区,flag1的值永远不变,这样做的目的是记录下了这个一个人经过了该风险区,而不是有多少个坐标经过该风险区(再后面遇到的坐标并不会影响flag1的值)。
如果经历的次数等于k时,那就记录下这个人在此地逗留过。flag2的值就置为1.并且因为if条件中是!flag2,此后都不会改变flag2的值。

并且题目中是连续经过该区域k次才算逗留 而不是所有坐标有k个在里面。所以每当遇到一个在区域外的坐标就将flag的值置为0.
在这里插入图片描述
如果是让判断有k个在里面,就把flag=0改为continue即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值