题目描述
解题思路
1.遍历所有居民的每个时间段位置,判断该时间段居民位置是否在区域内部。(判断条件为x >= xl && x<=xr && y>=yd && y <= yu)
2.若有,则该居民一定经过区域;若有连续的点经过该区域(>=k),则该居民逗留该区域。
注意:由于题目定义逗留为连续的点,所以在某一点不经该区域时,需要将经过该区域的点的个数numlay置0,即不连续则清零。(前提是已有的numlay<逗留临界值k,否则直接置0会导致代码的逗留结果比实际值小)
标程
int main()
{
int n, k, t;
int xl, yd, xr, yu;
int pass = 0, lay = 0;
int numpass = 0, numlay = 0;
bool flaglay = 0;
scanf_s("%d%d%d%d%d%d%d", &n, &k, &t, &xl, &yd, &xr, &yu);
for (int i = 0; i < n; i++)
{
int numpass = 0,numlay = 0;
flaglay = 0;
for (int j = 0; j < t; j++)
{
int x, y;
scanf_s("%d%d", &x, &y);
if(x >= xl && x<=xr && y>=yd && y <= yu)
{
numpass++;
numlay++;
if (numlay >= k)
{
flaglay = 1;
} //给全是在区域内的居民留出判断机会
}
//numplay不连续则清零,前提此时num<k,若反之则bool flaglay = 1
else
{
if (numlay >= k)
{
flaglay = 1;
}
numlay = 0;
}
}
if (numpass)
{
pass++;
}
if (flaglay)
{
lay++;
}
}
printf("%d\n%d", pass, lay);
return 0;
}
这样就可以得到满分了。