2020-09-2 风险人群筛查简单的第二题 普通状态转移 OJ有问题
索引
2020-09-2 风险人群筛查 状态转移
这个题目的oj有问题,而且题目也有问题。
官方的oj会把这题的运行时错误,反馈成运行超时,所以越界了也不知道还以为是超时。
题目给出的数据范围不太对,然后看到acwing上的数据范围
然后把数据范围变大就直接过了。
思路
遍历每个人的轨迹,记录状态,如果去过高危区域则增加高危区域的人数,如果连续在风险地区那么就增加在高危区域逗留的人数,没有什么困难的地方
我提交了,结果20分超时,提交了20分超时,就是我正常的按题目给的数据范围输入然后不做处理只输入,发现也是接近超时
非常奇怪,加了O2优化也不行
然后我看了acwing上说 1 ≤ n ≤ 24 1\leq n \leq 24 1≤n≤24 然后我把数组开大了,一下就过了100分
完整代码
#include <bits/stdc++.h>
using namespace std;
int n, k, t, xl, yd, xr, yu;
int stay, stayk;
int x[25][1001];
int y[25][1001];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n >> k >> t >> xl >> yd >> xr >> yu;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= t; j++)
{
int a, b;
cin >> a >> b;
x[i][j] = a;
y[i][j] = b;
}
}
for (int i = 1; i <= n; i++)
{
bool times = 0;
int long_times = 0;
int max_long_times = -1;
for (int j = 1; j <= t; j++)
{
if (x[i][j] >= xl && x[i][j] <= xr && y[i][j] >= yd && y[i][j] <= yu)
{
times = true;
long_times++;
}
else
{
max_long_times = max(max_long_times, long_times);
long_times = 0;
}
}
max_long_times = max(max_long_times, long_times);
if (times)
stay++;
if (max_long_times >= k)
stayk++;
}
cout << stay << endl;
cout << stayk << endl;
return 0;
}