#include <bits/stdc++.h>
using namespace std;
bool com(int &a, int &b) {
return a > b;
}
//n个居民,t个时刻
//>=k逗留
int main() {
int n, k, t, a, b, c, d;
cin >> n >> k >> t >> a >> b >> c >> d;
int jing = 0, dou = 0;
//左下角是(a,b);右下角是(c,b);左上角是(a,d);右上角是(c,d);
//横坐标在(a,c)之间,纵坐标在(b,d)之间
while (n--) { //每个居民
int count = 0; //记录连续出现的次数
vector <int> lian;
bool jingguo = 0;
for (int i = 0 ; i < t; i++) {
int x, y;
cin >> x >> y;
if ((x <= c && x >= a) && (y <= d && y >= b)) {
jingguo = 1;
count++;
} else {
lian.push_back(count);
count = 0;
}
}
lian.push_back(count);//最后一个也是处于区域内的情况
if (jingguo == 1) {
jing++;
if (!(lian.empty())) {//注意这里!
sort(lian.begin(), lian.end(), com);
if (lian[0] >= k) {
dou++;
}
}
}
}
cout << jing << endl << dou;
}
注意考虑lian可能为空的情况,要先判断一下 。
#include <bits/stdc++.h>
using namespace std;
bool com(int &a, int &b) {
return a > b;
}
//n个居民,t个时刻
//>=k逗留
int main() {
int n, k, t, a, b, c, d;
cin >> n >> k >> t >> a >> b >> c >> d;
int jing = 0, dou = 0;
//左下角是(a,b);右下角是(c,b);左上角是(a,d);右上角是(c,d);
//横坐标在(a,c)之间,纵坐标在(b,d)之间
while (n--) { //每个居民
int count = 0; //记录连续出现的次数
int doutime = 0;
bool jingguo = 0;
for (int i = 0 ; i < t; i++) {
int x, y;
cin >> x >> y;
if ((x <= c && x >= a) && (y <= d && y >= b)) {
jingguo = 1;
count++;//注意这个位置
doutime = max(doutime, count);
} else {
count = 0;
}
}
if (jingguo == 1) {
jing++;
if (doutime >= k) {
dou++;
}
}
}
cout << jing << endl << dou;
}
本来是想优化一下的,但是两个版本的代码在速度和占用内存上差不多。