问题描述
试题编号: | 202009-2 |
试题名称: | 风险人群筛查 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 题目背景某地疫情爆发后,出于“应检尽检”的原则,我们想要通知所有近期经过该高危区域的居民参与核酸检测。 问题描述想要找出经过高危区域的居民,分析位置记录是一种简单有效的方法。 具体来说,一位居民的位置记录包含 t 个平面坐标 (x1,y1),(x2,y2),⋯,(xt,yt),其中 (xi,yi) 表示该居民 i 时刻所在位置。 考虑某位居民的位置记录,如果其中某个坐标位于矩形内(含边界),则说明该居民经过高危区域;进一步地,如果其中连续 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 Data 样例输出1 Data 样例1说明如下图红色标记所示,前三条位置记录经过了高危区域; 样例输入2 Data 样例输出2 Data 样例2说明该位置记录经过了高危区域,但最多只有连续两个时刻位于其中,不满足逗留条件。 评测用例规模与约定全部的测试点满足 1≤n≤20,1≤k≤t≤103,所有坐标均为整数且绝对值不超过 106。 |
#include <iostream>
using namespace std;
int main() {
int n, k, t, xl, yd, xr, yu,x,y;
cin >> n >> k >> t >> xl >> yd >> xr >> yu;
int sum_jg, sum_dl,count;
sum_jg = sum_dl = count = 0;
int flag_jg, flag_dl;
flag_jg = flag_dl = 0;
for (int i = 0; i < n; ++i) {
count = 0;
flag_jg = flag_dl = 0;
for (int j = 0; j < t; ++j) {
cin >> x >> y;
if (x >= xl && x <= xr && y >= yd && y <= yu) {
flag_jg = 1;
count++;
if (count == k)
flag_dl = 1;
}
else
count = 0;
}
sum_jg += flag_jg;
sum_dl += flag_dl;
}
cout << sum_jg << endl;
cout << sum_dl << endl;
return 0;
}