CCF- CSP 202009-2风险人群筛查 满分题解
CCF- CSP 202009-2风险人群筛查 满分题解
题目链接:202009-2风险人群筛查
思路:
- 坐标的绝对值不超过106,采用
int
数据类型即可 - 定义
ans_pass
表示经过高危区域的人数,ans_wait
表示在高危区域逗留的人数 - 边输入边处理,当输入的坐标满足
x>=xl&&y>=yd&&x<=xr&&y<=yu
则认为该坐标位于高危区域内 - 我们需要记录连续位于高危区域内的坐标最大长度,用
last
来记录 - 如果
last>0
说明,该人经过高危区域;如果last>=k
,该人在高危区域逗留过 - 阅读理解:“连续 k 个或更多坐标均位于矩形内(含边界)”是说明
last>=k
,并不是有>k
个不同点位于高危区域内
代码如下:
#include<iostream>
#include<algorithm>
using namespace std;
int n,k,t,xl,yd,xr,yu;
int main()
{
cin>>n>>k>>t>>xl>>yd>>xr>>yu;
int ans_pass = 0;//经过高危区域的人数
int ans_wait = 0;//逗留高危区域的人数
while(n--)
{
int sum = 0;//辅助记录最大连续长度
int last = 0;//记录最大连续长度
for(int i=1;i<=t;i++)
{
int x,y;
cin>>x>>y;
//在高危区域内
if(x>=xl&&y>=yd&&x<=xr&&y<=yu)
{
sum++;
last = max(sum,last);//取最大长度
}
else
{
sum = 0;
}
}
//经过
if(last>0)
{
ans_pass++;
}
//逗留过
if(last>=k)
{
ans_wait++;
}
}
cout<<ans_pass<<endl<<ans_wait<<endl;
}